我在我的項目這兩個功能:從原始指針到std :: shared_ptr的
char* V8StringToChar(v8::Handle<v8::String> str);
char* V8StringToChar(v8::Local<v8::Value> val);
我轉換他們:
template <class T>
class ArrayDeleter {
public:
void operator() (T* d) const
{ delete [] d; }
};
std::shared_ptr<char> V8StringToChar(v8::Handle<v8::String> str);
std::shared_ptr<char> V8StringToChar(v8::Local<v8::Value> val);
與身體
std::shared_ptr<char> V8StringToChar(Handle<String> str) {
int len = str->Utf8Length();
char* buf = new char[len + 1];
str->WriteUtf8(buf, len + 1);
return std::shared_ptr<char>(buf, ArrayDeleter<char>());
}
std::shared_ptr<char> V8StringToChar(Local<Value> val) {
return V8StringToChar(val->ToString());
}
而且他們的每一次使用到(&*V8StringToChar(whatever))
。
它完美地構建。
它導致運行時錯誤。
是否有任何情況下,這可能會失敗並請提供一些很好的解決方案?
對於字節數組使用向量。 –
該標準已經提供了一個數組刪除器,使用'std :: default_delete'(注意'[]'字符來指定一個數組,因此它使用'delete []') –
可能是因爲'&*'給了你一個raw指針,當數組被刪除時可以使其失效 - 在你的例子中,這是立即發生的,然後你可以用指針做任何事情。只有當你真的需要一個原始指針時才這樣做,並且要非常小心地確保沒有任何東西保持指針。 –