c++ - 如何通过 std::shared_ptr 访问实例成员变量?

标签 c++ shared-ptr

我不知道为什么我在网上找不到这个,但是我如何通过 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/

相关文章:

C++ std::shared_ptr 用法和信息

c++ - 我可以同时复制一个 shared_ptr 吗?

c++ - Shared_ptr 和 unique_ptr 有异常(exception)

c++ - std::shared_ptr 为 null 但不为空

C++ boost::shared_ptr 作为一个类的成员并重复设置它的值

C++ 自动与自动&

c++ - "undefined reference to"使用'g++'编译C++程序

c++ - 存储数据类型信息

c++ - 如何使用 cppclean 查找未使用的 header

c++ - 使用与其他来源不同的编译器来 boost 编译