繁体   English   中英

转换(隐式)提升shared_ptr <T> 到shared_ptr <const T>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM