Fra*_*ank 45 c++ boost memory-management shared-ptr
我有很多boost::shared_ptr<MyClass>对象,在某些时候我故意想要delete其中一些来释放一些记忆.(我知道那时我将永远不再需要尖头MyClass物体了.)我怎么能这样做?
我想你不能只delete()用我得到的原始指针调用get().
我见过一个函数get_deleter(shared_ptr<T> const & p)中boost::shared_ptr,但我不知道如何使用它,并且还表示,实验就在旁边.(我想我有1.38升.)
也许只是boost::shared_ptr为变量分配一个新的空?这应该扔掉旧值并删除它.
Joh*_*itb 82
你这样做
ptr.reset();
Run Code Online (Sandbox Code Playgroud)
请参阅shared_ptr手册.它相当于
shared_ptr<T>().swap(ptr)
Run Code Online (Sandbox Code Playgroud)
您调用reset每个不应该引用该对象的智能指针.最后一个reset(或导致引用计数实际上降为零的任何其他操作)将导致对象自动使用删除器.
整点boost::shared_ptr<T>是,而指向对象将被删除恰好在那一刻没有shared_ptr<T>在IT方面一点-那就是,当最后shared_ptr<T>这个对象指向超出范围或重新分配给指向不同的对象.因此,删除对象所需要做的就是确保没有shared_ptr<T>指向它的东西.例如,如果你只有一个shared_ptr<T>被调用p指向一个对象,要么让它超出范围,要么调用p.reset()(相当于p = NULL普通指针),或者指定它指向其他东西.
如果你有两个shared_ptr<T>指向对象,你需要重新分配它们.
编辑:感谢dehmann指出p = NULL;实际上不是有效的代码shared_ptr<T>... :)