如果我想,为了常量正确性,重载返回成员指针的类成员,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>
(很少有任何意义。