c – 如何为std :: vector创建shared_ptr?

前端之家收集整理的这篇文章主要介绍了c – 如何为std :: vector创建shared_ptr?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要为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*/);

(2)管理向量的副本(通过调用向量复制构造函数):

std::vector<uint8_t> mVector;
auto mSharedPtr = std::make_shared<std::vector<uint8_t> >(mVector);

(3)移动向量(通过调用向量移动构造函数):

std::vector<uint8_t> mVector;
auto mSharedPtr = std::make_shared<std::vector<uint8_t> >(std::move(mVector));
//don't use mVector anymore.

猜你在找的C&C++相关文章