gpt4 book ai didi

c++ - 是否有一种惯用的方法来限制 shared_ptr::reset 的使用

转载 作者:行者123 更新时间:2023-11-28 04:55:58 31 4
gpt4 key购买 nike

如果对特定引用计数对象的 shared_ptr::reset 的调用没有出现在我的代码中,那么如果这可以在编译时明确且可执行,那就太好了。

有没有标准的方法来做到这一点?

澄清:如果 shared_ptr 本身私下调用重置是可以的。我只是想确保我不会在我的代码中调用它。

更新:@Brian 实际上在评论中回答了它。 const auto p = make_shared... 解决了我声明的问题,如果其他人制作了非 const 拷贝,则这是他们的问题。我从未见过有人将 shared_ptr 声明为 const,因此不知何故我没有考虑它。

最佳答案

您不能强行阻止某人调用某个类的特定公共(public)接口(interface)函数。这就是为什么它是一个公共(public)接口(interface)。

不清楚你的意思:

a call to shared_ptr::reset does not appear in my code for a specific reference counted object

令人困惑的部分是“特定引用计数对象”的含义。您可能在谈论 shared_ptr<T> 的特定实例对象.在这种情况下,如果您想阻止某人重置该特定实例,您可以将其声明为 const。目的。这也将防止对其进行复制/移动分配,这可能具有相同的效果。

如果“特定引用计数对象”指的是 T,那将不起作用由指针持有,而不是 shared_ptr<T> .有人可以拍const对象并将其复制到非 const对象足够容易。他们将无法重置 const指针,但他们仍然可以重置指向该 T 的指针.

如果shared_ptr<T>::reset足够冒犯你,你可以(私下)从shared_ptr派生一个新类, 然后继承你想要的接口(interface),除了 reset .然后你使用你的派生类而不是实际的 shared_ptr .

当然,您还需要摆脱复制/移动赋值运算符,因为它们可用于产生与 reset 相同的效果.如果你有这样一个 non_rebindable_shared_ptr , 那么它不应该有一个默认的构造函数,因为创建一个空的构造函数是没有用的。

关于c++ - 是否有一种惯用的方法来限制 shared_ptr::reset 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128400/

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