내가 가지고 내 프로젝트에서 이러한 두 가지 기능 : 나는 그들을 변환이 성병 :: shared_ptr의
char* V8StringToChar(v8::Handle<v8::String> str);
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());
}
로 몸
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);
그리고 모든 사용은 (&*V8StringToChar(whatever))
입니다.
그리고 완벽하게 구축됩니다.
그리고 런타임 오류가 발생합니다.
실패 할 수있는 경우가 있습니까? 그리고 좋은 해결책을 제공해주십시오. 대신
(&*V8StringToChar(whatever))
의
바이트 배열에 대해서는을 사용하십시오. –
표준은 이미 배열 삭제기를 제공하고 있습니다.'std :: default_delete'을 사용하십시오 (배열을 지정하기 위해'[]'문자에주의하십시오,'delete []'를 사용합니다) –
아마도'& *'는 당신에게 raw 포인터는 배열을 삭제할 때 무효화 될 수 있습니다. 예를 들어, 포인터로 무엇이든 할 수 있기 전에 즉시 발생합니다. 정말 원시 포인터가 필요할 때만 그렇게하고 아무 것도 포인터를 유지하지 않도록주의해야합니다. –