gpt4 book ai didi

c++ - 如何从 boost::shared_ptr 释放指针?

转载 作者:IT老高 更新时间:2023-10-28 12:30:42 27 4
gpt4 key购买 nike

boost::shared_ptr 可以释放存储的指针而不删除它吗?

我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不​​唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针?或者使用哪个 boost 智能指针类可以让我释放指针?我希望你不要说使用 auto_ptr :)

最佳答案

不要。 Boost 的常见问题解答条目:

Q. Why doesn't shared_ptr provide a release() function?

A. shared_ptr cannot give away ownership unless it's unique() because the other copy will still destroy the object.

Consider:

shared_ptr<int> a(new int);
shared_ptr<int> b(a); // a.use_count() == b.use_count() == 2

int * p = a.release();

// Who owns p now? b will still call delete on it in its destructor.

Furthermore, the pointer returned by release() would be difficult to deallocate reliably, as the source shared_ptr could have been created with a custom deleter.

因此,如果它是唯一指向您的对象的 shared_ptr 实例(当 unique() 返回 true 时)并且该对象不需要特殊的删除器,这将是安全的。如果您使用这样的 .release() 函数,我仍然会质疑您的设计。

关于c++ - 如何从 boost::shared_ptr 释放指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com