智能指针实现及原理
来源:互联网 发布:宁波商品房成交数据 编辑:程序博客网 时间:2024/06/06 02:52
class TestPtr
{
public:
TestPtr(int *p): ptr(p) { }
~TestPtr( ) { delete ptr; }
// other operations
private:
int *ptr;
// other data
};
class RefPtr
{
friend class TestPtr;
int *ptr;
size_t count;
RefPtr (int *p): ptr(p), count(1) {}
~RefPtr () {
delete ptr;
}
};
class TestPtr
{
public:
TestPtr(int *p): ptr(new RefPtr(p)) { }
TestPtr(const TestPtr& src): ptr(src.ptr) {
++ptr->count;
}
TestPtr& operator= (const TestPtr& rhs) {
// self-assigning is also right
++rhs.ptr->count;
if (--ptr->count == 0)
delete ptr;
ptr = rhs.ptr;
return *this;
}
~TestPtr() {
if (--ptr->count == 0)
delete ptr;
}
private:
RefPtr *ptr;
};
#include <iostream>
#include <stdexcept>
using namespace std;
#define TEST_SMARTPTR
class Stub
{
public:
void print() {
cout<<"Stub: print"<<endl;
}
~Stub(){
cout<<"Stub: Destructor"<<endl;
}
};
template <typename T>
class SmartPtr
{
public:
SmartPtr(T *p = 0): ptr(p), pUse(new size_t(1)) { }
SmartPtr(const SmartPtr& src): ptr(src.ptr), pUse(src.pUse) {
++*pUse;
}
SmartPtr& operator= (const SmartPtr& rhs) {
// self-assigning is also right
++*rhs.pUse;
decrUse();
ptr = rhs.ptr;
pUse = rhs.pUse;
return *this;
}
T *operator->() {
if (ptr)
return ptr;
throw std::runtime_error("access through NULL pointer");
}
const T *operator->() const {
if (ptr)
return ptr;
throw std::runtime_error("access through NULL pointer");
}
T &operator*() {
if (ptr)
return *ptr;
throw std::runtime_error("dereference of NULL pointer");
}
const T &operator*() const {
if (ptr)
return *ptr;
throw std::runtime_error("dereference of NULL pointer");
}
~SmartPtr() {
decrUse();
#ifdef TEST_SMARTPTR
std::cout<<"SmartPtr: Destructor"<<std::endl; // for testing
#endif
}
private:
void decrUse() {
if (--*pUse == 0) {
delete ptr;
delete pUse;
}
}
T *ptr;
size_t *pUse;
};
int main()
{
try {
SmartPtr<Stub> t;
t->print();
} catch (const exception& err) {
cout<<err.what()<<endl;
}
SmartPtr<Stub> t1(new Stub);
SmartPtr<Stub> t2(t1);
SmartPtr<Stub> t3(new Stub);
t3 = t2;
t1->print();
(*t3).print();
return 0;
}
- 智能指针实现及原理
- 智能指针的原理及实现方案
- 智能指针的原理及实现方案
- 智能指针的实现及原理
- 智能指针的原理及实现方案
- 智能指针的原理及实现
- 智能指针的实现及原理
- 智能指针的实现及原理
- 智能指针的原理及实现
- 智能指针的实现及原理 + Good ! 句柄类
- [C/C++] 智能指针的实现及原理
- com智能指针实现原理
- 智能指针原理,并实现一个简单的智能指针
- 智能指针的原理及简单模拟
- 智能指针设计原理以及实现
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(二):shared_ptr实现原理
- 智能指针的实现和原理
- 壬辰倭亂
- 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- 从Delphi开始学Cocos2dx-3.0[1]: AppDelegate 与 Application
- vim下neocomplcache下载地址和配置和默认选择第一项
- 用FragmentActivity +FragmentTabHost 替换原有的tabhost
- 智能指针实现及原理
- 分布式系统
- vim html,java,javascript自动补全插件推荐
- Deep Learning 学习资料
- Hive远程模式
- Linux环境下Rsync的配置与使用
- android 退出应用程序
- linux安装redis
- 关于CreateProcess