Описание намерения с unique_ptr - PullRequest
3 голосов
/ 18 декабря 2010

Является ли следующий хороший способ описания намерения владения (без использования shared_ptr?)

class Z { };
class A
{
    unique_ptr<Z> m_z; //want to say 'I own Z'
};

class B
{
    B(A & a) 
    { 
        m_z = a._z.get(); 
    }

    Z* m_z; //want to say 'I do not own Z, just a ref...'
}

Также B._z может болтаться. Есть ли способ исправить проблему, не прибегая к shared_ptr и weak_ptr?

1 Ответ

2 голосов
/ 18 декабря 2010

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

Если вы не хотите использовать shared_ptr и не хотите иметь висячие указатели, вам может помочь шаблон наблюдателя. Используя его, вы можете убедиться в том, что экземпляр класса B получит сигнал, когда его _z будет уничтожен. Это может быть немного дороже, чем shared_ptr в A и weak_ptr в B. Для примера с безопасным потоком попробуйте ... Boost.Signals2 .

Я согласен, что использование weak_ptr выглядит уродливо, но наблюдатель также добавит немного кода в код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...