我不知道为什么我在网上找不到这个,但是我如何通过 shared_ptr 访问
我的方法尝试过的在下面的代码中被注释掉了。它们都导致了class instance member variables
?段错误
。
我假设我可以通过从 shared_ptr
获取一个 raw pointer
来访问成员变量,但我宁愿避免这样做,因为它不干净并且否定了shared_ptr
访问这些成员变量的安全方法是什么?
#include <memory>
#include <iostream>
class Test{
public:
int x;
Test() : x(5){}
};
int main()
{
std::shared_ptr<Test> f;
// the following lines both produce seg faults
// std::cout << (*f).x << std::endl;
// std::cout << f->x << std::endl;
}
最佳答案
你的问题出在std::shared_ptr<Test> f;
线上.该行类似于 Test* f;
;你声明一个指向 Test
的指针,但您尚未创建 Test
它要指向的对象。你需要使用
std::shared_ptr<Test> f(std::make_shared<Test>());
然后您可以使用 f->x
访问成员或 (*f).x
与原始指针相同。
关于c++ - 如何通过 std::shared_ptr 访问实例成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843229/