如果出于常量正确性的考虑,我想重载返回成员指针的类成员,那么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方法?如果不是,那么两种返回类型之间到底有什么区别,更好的做法是什么?
答案 0 :(得分:1)
将shared_ptr强制转换为shared_ptr会更改其指向的对象吗?
不。强制转换指针不会更改指向的对象。
两种返回类型之间的区别到底是什么
不可能通过指向const的指针来修改指向的对象。可以通过指向非常量的指针来修改指向的对象。
请注意,共享指针没有接受浮点数的构造函数,因此示例程序的格式不正确。
返回const对象(const std::shared_ptr<float>
)几乎没有任何意义。