template <typename T>
class shared_ptr {
public:
shared_ptr(): p(nullptr), use(new std::size_t(1)) { }
explicit shared_ptr(T *pt): p(pt), use(new std::size_t(1)) { }
shared_ptr(const shared_ptr &sp): p(sp.p), use(sp.use) { if (use) ++*use; }
shared_ptr& operator=(const shared_ptr&);
~shared_ptr();
T& operator*() { return *p; }
const T& operator*() const { return *p; }
private:
T *p;
std::size_t *use;
};
template <typename T>
shared_ptr<T>::~shared_ptr() {
if (use && 0 == --*use) {
delete p; // del ? del(p) : delete p;
delete use;
}
}
如上所示。是C++ Primer 第五版16.1.6节的一个问题,请问我应该给shared_ptr类增加一个什么类型的成员del,才能够使得这个类可以接受一个可调用对象,此对象的目的是清理动态内存分配的指针,但是可以自定义这个对象的行为。
谢谢!
可以参考一下。。。
可在shared_ptr里维护一个类型为void (*)(T*)的函数指针,然后在需要释放内存的时候调一下这个函数。一个简单的例子:
我太天真了=,-,你可以看看这个回答 关于c++中,shared_ptr中的删除器
参考了araraloren的回答,感谢!