c++ - 如何故意删除 boost::shared_ptr?

标签 c++ memory-management boost shared-ptr

我有很多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/

相关文章:

c++ - std::upper_bound 在 const 成员函数中返回 const 迭代器

c++ - C++ 中的临时变量、引用和三元运算符

c++ - 这段代码可以在我的 PC 上编译,但不能在竞赛服务器上的标准 C++98 编译器上编译

java - 查找JVM分配的内存

memory-management - _int_malloc 和 malloc 有什么区别(在 Valgrind 中)

ios - UIWebView - CFData 何时(或如何)发布?

c++ - 在将字符串转换为 ptime 时使用 %f 标志 boost ptime input_facet 错误

c++ - boost 间隔与多精度

c++ - g++ 4.8.5 负数组索引的循环优化错误

来自文件输入的c++数组