2013-08-21 4 views
0

Я новичок в C++. Я пришел через использование станд :: unique_ptr и станд :: shared_ptr в моем кодеРазница между std :: unique_ptr и std :: shared_ptr в C++

typedef std::unique_ptr<type1> type1Handler; 
typedef std::shared_ptr<type2> type2Handler; 

У меня есть два вопроса:

  1. Что такое преимущество использования unique_ptr и shared_ptr
  2. Что является ли основное различие между ними?

Возможно, это было бы очень полезно!

+3

Пробовали ли вы Google на всех? –

ответ

6

Они предназначены для 2 совершенно разных вариантов использования.

  1. std::unique_ptr сохраняет единственной собственности объекта и уничтожает этот объект, когда unique_ptr выходит из области видимости. Нет двух экземпляров unique_ptr, которые могут управлять одним и тем же объектом. (http://en.cppreference.com/w/cpp/memory/unique_ptr)

  2. std::shared_ptr сохраняет разделяет собственность объекта. Несколько объектов shared_ptr могут иметь один и тот же объект. Объект уничтожается, и его память освобождается, когда последний оставшийся shared_ptr, владеющий объектом, уничтожается или последнему оставшемуся shared_ptr, которому принадлежит объект, присваивается другой указатель через operator= или reset(). (http://en.cppreference.com/w/cpp/memory/shared_ptr)

Чтобы обеспечить соблюдение единоличного владения std::unique_ptr не является назначаемым и не копируемым. Это означает, что вам нужно использовать семантику переноса.

Если вы видите unique_ptr где-то в коде, это значит, что Посмотрите, вот указатель, и у нас есть это!. Этого нельзя сказать о shared_ptr, где собственность может быть разбросана по всему коду.

Смежные вопросы