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



如果我想,为了常量正确性,重载返回成员指针的类成员,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 方法?如果不是,两种返回类型之间究竟有什么区别,更好的做法是什么?

将shared_ptr转换为shared_ptr是否会更改它所指向的对象?

不。投射指针不会更改指向的对象。

两种返回类型之间究竟有什么区别

无法

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

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

返回一个常量对象(const std::shared_ptr<float>(很少有任何意义。

相关内容

  • 没有找到相关文章

最新更新