请原谅这个简单的问题,但我在理解指向集合的指针时遇到了麻烦。
想象一下,我有这个字节向量:
vector<uint8_t> n;
我想将它存储在共享指针中。为什么我需要地址(&amp;)运算符?
shared_ptr<vector<uint8_t>> m(&n);
我认为构造函数会使用n
。但我也认为我对这里发生的事情有一种深刻的误解:)
答案 0 :(得分:5)
我想将它存储在共享指针中。
不,不。共享指针用于管理需要删除的动态对象;此向量不是使用new
创建的,因此无法通过(普通)共享指针进行管理。指针会尝试删除它,造成混乱。
您想要动态创建向量,以便shared_ptr
可以正确管理它:
auto m = make_shared<vector<uint8_t>>();
为什么我需要地址(&amp;)运算符?
因为共享指针(通常)用于管理用new
创建的对象,而new
给出指针;所以shared_ptr
有一个构造函数接受一个指针参数。但是,通常最好使用上面演示的make_shared
函数,而不是自己弄乱new
。