Требуется копия - она должна, так как время жизни Platform::String^
определяется путем подсчета ref, а не с помощью обычных правил жизни C++.
auto greeting = std::make_unique<wchar_t[]>(20);
wcscpy_s(greeting.get(), 20, L"Hello, World");
auto s = ref new Platform::String(greeting.get());
greeting.reset();
// Still works, even though the original string is gone
OutputDebugString(s->Data());
Если вы посмотрите на файл vccorlib.h в вашем VC включают каталог (например C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ включают), то вы увидите, конструктор, который принимает const ::default::char16* __strArg
, в конечном итоге вызывает WindowsCreateString
, который берет копию.
@EdChum это не C++/CLI, но C++/CX. Да, подумайте, почему они создали еще один синтаксис ... –
@LucasTrzesniewski Jesus, я думал, что они остановились на C++/CLI! Извините, если это глупо, это подсказка здесь, в пространстве имен и/или использовании авто? – EdChum
@EdChum есть два ключа: использование 'ref new' вместо' gcnew' (я думаю, 'gcnew' не подходит, поскольку C++/CX не собирает мусор, а подсчитывается вместо него), и использование 'Platform :: String ^' вместо 'System :: String ^' для C++/CLI. 'auto' также поддерживается в C++/CLI. –