我有很多boost::shared_ptr<MyClass>
对象,并且在某些时候我故意想要delete
其中一些释放一些内存。 (那时我知道我再也不需要指向 MyClass
的对象了。)我该怎么做呢?
我想你不能只调用 delete()
使用我通过 get()
获得的原始指针.
我见过一个函数 get_deleter(shared_ptr<T> const & p)
在 boost::shared_ptr
,但我不知道如何使用它,而且它旁边还写着 experimental。 (我想我有 Boost 1.38。)
也许只是分配一个新的空 boost::shared_ptr
变量?那应该丢弃旧值并将其删除。
最佳答案
你只是这样做
ptr.reset();
见 shared_ptr manual .相当于
shared_ptr<T>().swap(ptr)
您在每个不应再引用该对象的智能指针上调用 reset
。最后一个这样的 reset
(或任何其他导致引用计数降至零的操作,实际上)将导致使用删除器自动释放对象。
也许您对 Smart Pointer Programming Techniques 感兴趣.它有一个关于 delayed deallocation 的条目.
关于c++ - 如何故意删除 boost::shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621233/