如果对我的代码中没有出现对shared_ptr::reset
的调用以获取特定的引用计数对象,那么如果可以在编译时将其显式化并可强制执行,那将会很好。
有没有一种标准方法可以做到这一点?
澄清:如果shared_ptr本身私下调用reset,则可以。我只是想确保我不在我的代码中调用它。
更新:@Brian实际上在评论中回答了这个问题。 const auto p = make_shared...
解决了我所声明的问题,如果他们复制了他们的问题。我从来没有看到有人宣布shared_ptr
为const,因此不知何故我没想过。
答案 0 :(得分:1)
您不能强行阻止某人调用类的特定公共接口函数。这就是为什么它是 public 界面。
目前尚不清楚你的意思:
对
shared_ptr::reset
的调用没有出现在我的代码中,用于特定的引用计数对象
令人困惑的部分是“特定参考计数对象”的含义。您可能正在谈论shared_ptr<T>
的特定实例对象。在这种情况下,如果您想阻止某人重置该特定实例,您可以将其声明为const
对象。这也会阻止复制/移动分配,这可能会产生相同的效果。
如果“特定引用计数对象”引用指针所持有的T
而不是shared_ptr<T>
,则不起作用。有人可以使用const
对象并将其轻松复制到非const
对象。他们将无法重置const
指针,但他们仍然可以重置指向T
的指针。
如果shared_ptr<T>::reset
冒犯了你,你可以从shared_ptr
派生(私下)一个新类,然后继承你想要的接口,reset
除外。然后使用派生类而不是实际的shared_ptr
。
当然,您还需要摆脱复制/移动赋值运算符,因为它们可以用于与reset
具有相同的效果。如果你有这样的non_rebindable_shared_ptr
,那么它不应该有一个默认的构造函数,因为创建一个空构造函数是没用的。