#c #class #shared-ptr #smart-pointers #unique-ptr
Вопрос:
Я узнал, что уникальные указатели «умирают» в конце области видимости. Итак, как это работает у членов класса? Работают ли общие указатели?
Комментарии:
1. ДА. также рекомендуется их использовать.
2. Хотя время жизни объекта и лексическая область связаны, они не являются одним и тем же. Вы беспокоитесь о том, что член класса «умирает», но задумывались ли вы о том, когда он «оживает»?
Ответ №1:
Да, безусловно! Вы можете использовать их в классах в качестве участников.
Когда он используется в качестве переменной-члена, время жизни уникального указателя равно времени жизни самого объекта (если вы явно не освободите их). Когда объект будет уничтожен, уникальный указатель и все интеллектуальные указатели освободят его память.
Комментарии:
1. «и все интеллектуальные указатели освободят его память» Память, принадлежащая a
shared_ptr
, не обязательно будет освобождена, поскольку другиеshared_ptr
s все еще могут владеть той же памятью.
Ответ №2:
Могу ли я использовать интеллектуальные указатели в качестве членов класса в C ?
ДА. Практически любой класс может быть членом, за исключением классов, которые вообще не могут быть созданы.
Я узнал, что уникальные указатели «умирают» в конце области видимости.
Все автоматические переменные «умирают» в конце области видимости. Это свойство не относится конкретно к интеллектуальным указателям. Пример:
{
int i = 42;
} // i "dies" here
Вещь, которая отличает интеллектуальные указатели от голых указателей, заключается не в том, что они «умирают» в конце области видимости (потому что голые указатели также «умирают»), а в том, что делают интеллектуальные указатели, когда они «умирают».
Нестатический элемент переменной «умирает», когда суперобъект «умирает».
Работают ли общие указатели?
ДА.