gpt4 book ai didi

c++ - 使用 unique_ptr 和 vector

转载 作者:行者123 更新时间:2023-11-30 02:52:27 26 4
gpt4 key购买 nike

我有这个代码:

v8::Handle<v8::Value> StartMethod(const v8::Arguments &args) {
v8::HandleScope scope; // node_isolate
int length = args.Length();
std::vector<std::unique_ptr<char[]>> argv;
for(int i=0;i<length;++i) {
if(args[i]->IsString()) {
v8::String::Utf8Value str(args[i]);
const int strLen = ToCStringLen(str);
if(strLen) {
std::unique_ptr<char []> data(new char[strLen+1]);
strcpy_s(data.get(), strLen+1, ToCString(str));
argv.push_back(std::move(data));
}
}
}
return scope.Close(v8::Int32::New(MainMethod(argv.size(), &(argv[0]._Myptr))));
}

我正在使用 std::move 并且工作正常。当我不使用 std::move 时,由于 assignment 函数不可用,它会给我编译器错误。

但是它是否保证当 vector 改变它的位置时,可能是因为一些内部调整大小和移动对象,不会发生什么坏事?

最佳答案

vector<T>::push_back为仅移动类型提供强大的异常安全保证 if and only if the move construtor of T does not throw .

在你的情况下 Tunique_ptr对于数组对象,其移动构造函数声明为 noexcept (§20.7.1.3),所以你在这里确实很好:如果 vector 的内部调整大小抛出 bad_alloc , vector 将保持不变且可用。

关于c++ - 使用 unique_ptr 和 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910815/

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