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的回答,感謝!