Могу ли я использовать интеллектуальные указатели в качестве членов класса в C ?

#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
 

Вещь, которая отличает интеллектуальные указатели от голых указателей, заключается не в том, что они «умирают» в конце области видимости (потому что голые указатели также «умирают»), а в том, что делают интеллектуальные указатели, когда они «умирают».

Нестатический элемент переменной «умирает», когда суперобъект «умирает».

Работают ли общие указатели?

ДА.