向量的共享指针

时间:2014-02-25 02:02:03

标签: c++ pointers collections shared-ptr

请原谅这个简单的问题,但我在理解指向集合的指针时遇到了麻烦。

想象一下,我有这个字节向量:

vector<uint8_t> n;

我想将它存储在共享指针中。为什么我需要地址(&amp;)运算符?

shared_ptr<vector<uint8_t>> m(&n);

我认为构造函数会使用n。但我也认为我对这里发生的事情有一种深刻的误解:)

1 个答案:

答案 0 :(得分:5)

  

我想将它存储在共享指针中。

不,不。共享指针用于管理需要删除的动态对象;此向量不是使用new创建的,因此无法通过(普通)共享指针进行管理。指针会尝试删除它,造成混乱。

您想要动态创建向量,以便shared_ptr可以正确管理它:

auto m = make_shared<vector<uint8_t>>();    
  

为什么我需要地址(&amp;)运算符?

因为共享指针(通常)用于管理用new创建的对象,而new给出指针;所以shared_ptr有一个构造函数接受一个指针参数。但是,通常最好使用上面演示的make_shared函数,而不是自己弄乱new