共享向量指针

Jus*_* R. 1 c++ collections pointers shared-ptr

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

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

vector<uint8_t> n;
Run Code Online (Sandbox Code Playgroud)

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

shared_ptr<vector<uint8_t>> m(&n);
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*our 5

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

不,你不会。共享指针用于管理需要删除的动态对象。此向量不是使用创建的new,因此无法通过(常规)共享指针进行管理。指针将尝试删除它,从而导致混乱。

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

auto m = make_shared<vector<uint8_t>>();    
Run Code Online (Sandbox Code Playgroud)

为什么需要(&)运算符的地址?

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

  • @Nick:是的,如果您提供的删除程序执行的操作不是`delete`。 (3认同)