【发布时间】:2013-09-20 07:07:13
【问题描述】:
我有这个代码:
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改变它的位置时,可能是因为一些内部调整大小和移动对象,不会发生任何不好的事情?
【问题讨论】:
-
我是唯一一个注意到最后一行
&(argv[0]._Myptr)的人吗?通过这种机制访问那个指针已经够糟糕的了,我什至不想猜测你为什么要把它的地址传递给……什么东西。您将很难找到较少便携或标准的东西。 -
@WhozCraig 我实际上想要
char **在那个位置。你能推荐一个更好的方法吗? -
是的。
char *tmp = data.get();,并使用&tmp我假设这是一个strtol-type 函数,如果是这样,它会在结果指针指向指针中返回终止信息(即它修改了指针)行为超出了未定义.即使 访问 该成员也是特定于实现的,无论如何都要使用临时 ptr。你现在用&(argv[0]._Myptr)做的事情是可怕的。
标签: c++ vector unique-ptr