是否将shared_ptr <T>转换为shared_ptr <const T>会更改其指向的对象?

时间:2019-07-13 23:28:22

标签: c++ overloading const smart-pointers

如果出于常量正确性的考虑,我想重载返回成员指针的类成员,那么const std::shared_ptr<T>std::shared_ptr<const float>之间到底有什么区别?例如,在以下类别中:

class A {
public:
    A() {}
    /* */
    std::shared_ptr<float>           getMemberPtr() { return std::shared_ptr<float>(member); }
    const std::shared_ptr<float> getMemberPtr() const { return std::shared_ptr<float>(member); }
    std::shared_ptr<const float> getMemberPtr() const { return std::shared_ptr<const float>(member); }
    /* */
    void setMember(float _val) { member = _val; }

protected:
    float member;
};

调用第二个重载是否会更改它指向的对象的类型,而不允许事后调用setter方法?如果不是,那么两种返回类型之间到底有什么区别,更好的做法是什么?

1 个答案:

答案 0 :(得分:1)

  

将shared_ptr强制转换为shared_ptr会更改其指向的对象吗?

不。强制转换指针不会更改指向的对象。

  

两种返回类型之间的区别到底是什么

不可能通过指向const的指针来修改指向的对象。可以通过指向非常量的指针来修改指向的对象。

请注意,共享指针没有接受浮点数的构造函数,因此示例程序的格式不正确。

返回const对象(const std::shared_ptr<float>)几乎没有任何意义。