資源的轉移不推薦使用。
舊庫使用擁有者會導致野指標
實現**
template
class autoptr
autoptr(autoptr& ap)
:_ptr(ap._ptr)
autoptr& operator=(autoptr& ap)
return *this;
}~autoptr()
}t* getptr()
const t* getptr()const
t& operator*()
const t& operator*()const
t* operator->()
const t* operator->()const
private:
t* _ptr;
};
測試用例
void test_autoptr()
; autoptrap3(new a);
ap3->a = 2;
ap3->b = 3;
std::cout
<< (*ap3).a << std::endl;
std::cout
<< (*ap3).b << std::endl;
autoptrap4;
ap4 = ap3;
std::cout
<< (*ap4).a << std::endl;
std::cout
<< (*ap4).b << std::endl;
}
輸出結果
20202
323
unique_ptr 是 c++11 標識, scopedptr 是 boost庫提供 還有scopedaarray
實現**
template class scopedptr
~scopedptr()
}t* operator->()
const t* operator->()const
t& operator*()
const t& operator*()const
t* getptr()
const t* getptr()const
private:
scopedptr(const scopedptr&);
scopedptr& operator=(const scopedptr&);
private:
t* _ptr;
};
測試用例
void test_scopedptr()
; scopedptrsp4(new a);
sp4->a = 1;
sp4->b = 2;
std::cout
<< (*sp4).a << std::endl;
std::cout
<< (*sp4).b<< std::endl;
}
輸出結果
20
12
實現**
template class scopedarray
~scopedarray()
}t& operator(size_t index)
const t& operator(size_t index)const
private:
scopedarray(const scopedarray&);
scopedarray& operator=(const scopedarray&);
private:
t* _ptr;
};
測試用例
void test_scopedarray()
; scopedarrayspa4(new a[10]);
spa4[0].a = 1;
spa4[0].b = 2;
std::cout
<< spa4[0].a << std::endl;
std::cout
<< spa4[0].b << std::endl;
}
輸出結果
20
12
存在的問題,迴圈引用,weak_ptr解決。他不會占用引用計數,必須用乙個sharedptr來賦值。
shared 定製刪除器。 c++11 提供了 shared_ptr。boost提供了shared_ptr 和 sharedarray。
實現**
template
class sharedptr
explicit sharedptr(const sharedptr& sp)
:_ptr(sp._ptr)
, _pcount(sp._pcount)
sharedptr& operator=(const sharedptr& sp)
_ptr = sp._ptr;
_pcount = sp._pcount;
++(*_pcount);
}return *this;
}~sharedptr()
}unsigned
int usecount()const
t& operator*()
const t& operator*()const
t* operator->()
const t* operator->()const
t* getptr()
const t* getptr()const
private:
t* _ptr;
unsigned
int* _pcount;
};
測試用例
void test_shareddptr()
輸出結果
122
3144
智慧型指標實現
namespace smart smart count 增加引用計數,並返回計數值.intaddref 減少引用計數,並返回計數值.intrelease private 計數變數.intuse count 智慧型指標.template class t class smart ptr 構造空指標.ex...
C 智慧型指標實現
1 問題的提出 先看下面的例子 class ctext ctext private int m ptr int funtext 在函式funtext 中,類的兩個物件共用了new出來的指標ptr。當函式執行開始時,呼叫兩次建構函式 退出執行時,呼叫兩次析構函式,而在第一次呼叫時已經delete pt...
智慧型指標的實現
pragma once includeusing namespace std 原理 資源的轉移 解決的問題 釋放指標 缺陷 如果乙個指標通過拷貝構造和賦值運算子過載將管理的空間交給其他指標,則原指標是沒有辦法訪問這塊空間了 if 0 templateclass autoptr autoptr aut...