gpt4 book ai didi

c++ - 如何为 std::vector 创建一个 shared_ptr?

转载 作者:可可西里 更新时间:2023-11-01 16:26:45 26 4
gpt4 key购买 nike

我需要为 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) 初始化vector,让它由shared_ptr管理:

auto mSharedPtr = std::make_shared<std::vector<uint8_t> >(/* vector constructor arguments*/);


(2) 管理 vector 的拷贝(通过调用 vector 复制构造函数):

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


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

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

关于c++ - 如何为 std::vector 创建一个 shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com