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。但是我也认为我对这里发生的事情有深刻的误解:)
我想将其存储在共享指针中。
不,你不会。共享指针用于管理需要删除的动态对象。此向量不是使用创建的new,因此无法通过(常规)共享指针进行管理。指针将尝试删除它,从而导致混乱。
您要动态创建矢量,以便shared_ptr可以正确管理它:
auto m = make_shared<vector<uint8_t>>();
Run Code Online (Sandbox Code Playgroud)
为什么需要(&)运算符的地址?
因为共享指针通常用于管理用创建的对象new,并new提供了一个指针;所以shared_ptr有一个构造函数接受指针参数。但是,通常最好使用make_shared上面演示的功能,而不是new自己弄乱。