В основных принципах cpp: Пример не владеющего необработанным указателем
Я не понимаю следующий код:
template<typename T>
class X2 {
// ...
public:
owner<T*> p; // OK: p is owning
T* q; // OK: q is not owning
};
что это за синтаксис owner<T*> p
?
Есть заметка о семантике owner
далее вниз по странице:
Заметка
owner<T*>
не имеет семантики по умолчанию заT*
, Его можно использовать без изменения какого-либо кода, использующего его, и не затрагивая ABI. Это просто индикатор для программистов и инструментов анализа. Например, еслиowner<T*>
является членом класса, этот класс лучше иметь деструктор, которыйdelete
сидеть.
Это в основном почти так же, как предложено std::observer_ptr
. Разница в том, что owner
хранит указатель и «владеет» им, хотя это не делает RAII как std::unique_ptr
, Это следует использовать, когда вы хотите более четко указать, что необработанный указатель является указателем-владельцем.
Обратите внимание, что «синтаксис» здесь является просто переменной класса шаблона, это не ключевое слово или что-то еще.
Других решений пока нет …