我需要为std :: vector创建一个shared_ptr,正确的语法是什么?
std::vector<uint8_t> mVector; shared_ptr<std::vector<uint8_t>> mSharedPtr = &mVector;
上面的代码不能编译.
谢谢.
解决方法
你要做的是让一个智能指针管理一个堆栈对象.这不起作用,因为堆栈对象在超出范围时会自行终止.智能指针不能阻止它这样做.
std::shared_ptr<std::vector<uint8_t> > sp; { std::vector<uint8_t> mVector; sp=std::shared_ptr<std::vector<uint8_t> >(&mVector); } sp->empty(); // dangling reference,as mVector is already destroyed
三种选择:
(1)初始化向量并让它由shared_ptr管理:
auto mSharedPtr = std::make_shared<std::vector<uint8_t> >(/* vector constructor arguments*/);
std::vector<uint8_t> mVector; auto mSharedPtr = std::make_shared<std::vector<uint8_t> >(mVector);
std::vector<uint8_t> mVector; auto mSharedPtr = std::make_shared<std::vector<uint8_t> >(std::move(mVector)); //don't use mVector anymore.