...
{
T * p = new T ;
....
delete p;
}
...
boost的smart ptr有shared_ptr可以用,不过boost实在太大了,这是唯一让我感到有些不爽的地方。
于是写了一个auto_deleteT的template class
template
class auto_deleteT {
public:
auto_deleteT(T * p) : _ptr(p){
}
~auto_deleteT() {
if(_ptr)
delete _ptr;
}
inline T * operator->() const {// never throws
assert(_ptr != 0);
return _ptr;
}
protected:
T * _ptr;
};
这样可以很方便使用 :
{
auto_deleteT
aptr->xxxx(....)
....
}
接着,再添加一个支持,可以把auto_deleteT放到STL的容器内:
...
auto_deleteT(const auto_deleteT
_ptr = a._ptr;
// giveup pointer.
auto_deleteT
at.reset();
}
auto_deleteT
_ptr = a._ptr;
auto_deleteT
at.reset();
return *this;
}
void reset() {
_ptr = 0;
}
....
STL容器内部使用的copy复制内容,这样如果auto_delete ptr被复制后,就主动放弃
pointer内容:
{
std::vector
for(int i=0; i
a(new obj...);
objs.push_back(a);
}
}
没有评论:
发表评论