![](/img/trans.png)
[英]Do boost::shared_ptr<T> and boost::shared_ptr<const T> share the reference count?
[英]Converting (implicit) boost shared_ptr<T> to shared_ptr<const T>
我有一个C ++函数,其参数如下:
void myFunction(shared_ptr<const MyObject> ptr)) {
...
}
在我的主要代码中,我做了这样的事情,它编译为:
shared_ptr<MyObject> test(new MyObject());
myFunction(test);
这是否意味着在MyFunction中,如果我取消引用ptr,则该对象是恒定的并且无法修改?
进行哪些转换才能编译?
它使用以下std::shared_ptr
构造函数:
template<class Y> shared_ptr(const shared_ptr<Y>& r) noexcept;
定义为“除非Y*
可隐式转换为T*
否则不参与过载解析”。 由于在您的示例中, T*
可隐式转换为const T*
,所以一切都很好。 当然,这很好,因为这意味着shared_ptr
的行为就像原始指针一样。
代码会编译,因为有一个shared_ptr<const MyObject>
的构造shared_ptr<const MyObject>
采用了shared_ptr<MyObject>
(如Joseph Mansfield的答案所示),因为const MyObject
可以毫无问题地绑定到MyObject
(请参阅C ++中的转换构造函数) ?它是做什么用的?和MSDN )。 确实,如果您尝试修改myFunction
ptr
指向的值,则将出现编译错误,表明您正在尝试修改常量对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.