gpt4 book ai didi

c++ - 将 shared_ptr 转换为 shared_ptr 会改变它指向的对象吗?

转载 作者:行者123 更新时间:2023-11-28 04:14:12 24 4
gpt4 key购买 nike

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

最佳答案

Does casting shared_ptr to shared_ptr changes the object it is pointed to?

没有。转换指针不会更改指向的对象。

what exactly is the difference between both return types

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

请注意,共享指针没有接受 float 的构造函数,因此示例程序格式错误。

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

关于c++ - 将 shared_ptr<T> 转换为 shared_ptr<const T> 会改变它指向的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com