Scoped Pointer in Boost: Что означает необработанный указатель?

Я прочитал в статье о Умные Указатели в Boost, что:

«scoped_ptr хорошо для сырые указатели, в то время как scoped_array полезно для динамические массивы

Но я не понял, что они имеют в виду под «сырыми указателями», так что ни предложение.

Может ли кто-нибудь из вас объяснить мне это? Спасибо

1

Решение

Их формулировка неудачна. Под «необработанными» указателями люди обычно подразумевают примитивные типы указателей, независимо от того, на что они указывают. Что они имеют в виду:

scoped_ptr хорош для указателей на отдельные объекты, а scoped_array полезен для динамических массивов

2

Другие решения

Необработанный указатель — это указатель, введенный синтаксисом языка с *:

int* ptr;

Это обычная переменная POD («необработанный» числовой адрес в памяти), поэтому она разрушается тривиально. Что важно и раздражает в необработанных указателях:

int* ptr = new int(42);

из-за того, что уничтожение ptr это неоперация, delete не будет вызван, и вы должны сделать это вручную. Умные указатели обертывают необработанные указатели и уничтожают указанные объекты (когда это необходимо).

C ++ 11 ввел умные указатели в стандартную библиотеку в виде unique_ptr а также shared_ptr, Вы должны использовать их вместо бустеров при настройке на C ++ 11.

Упоминание массивов происходит от того факта, что мы можем представлять массив как указатель на первый элемент и некоторое представление о размере. Например, char* является указателем на первый символ в массиве, и мы знаем, что он заканчивается в '\0', Динамическое размещение таких массивов выполняется new[] оператор (и разрушения delete[]); умные указатели из стандартной библиотеки тоже могут обрабатывать эти типы, но в общем случае std::vector рекомендуется вместо этого.

1

По вопросам рекламы [email protected]