Обеспечить инициализацию интеллектуального указателяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Обеспечить инициализацию интеллектуального указателя

Сообщение Anonymous »

Я пытаюсь отказаться от старой привычки и начать использовать умные указатели. < /p>
Мой текущий код: < /p>

Код: Выделить всё

int Foo(const std::wstring &catalog, /*...*/)
{
SQLWCHAR *cat = new SQLWCHAR[catalog.length() + 2];
memset( cat, '\0', catalog.length() + 2 );
// copy the catalog name to cat
// perform some work
delete[] cat;
cat = nullptr;
}
< /code>
косикаint Foo(const std::wstring &catalog, /*...*/)
{
std::unique_ptr cat = std::make_unique( catalog.length() + 2 );
// copy catalog to cat
// perform some work
}
Мой вопрос здесь: как я могу убедиться, что кошка инициализирована с помощью \ 0 ? Или это уже делается, поскольку умные указатели инициализируются с помощью \ 0 (в моем случае)?

Код: Выделить всё

void uc_to_str_cpy(SQLWCHAR *dest, const std::wstring &src)
{
const wchar_t *temp = src.c_str();
while( *dest )
{
dest++;
}
while( *temp )
{
*dest = *temp;
dest++;
temp++;
}
*dest++ = '\0';
*dest = '\0';
}
< /code>
И я называю его с < /p>
uc_to_str_cpy( cat, catalog );
< /code>
Теперь вызов изменится на < /p>
uc_to_str_cpy( cat.get(), catalog );
Но сама функция хороша?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ialization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»