Подтвердить что ты не робот

Увеличить Shared_pointer NULL

Я использую reset() как значение по умолчанию для моего shared_pointer (эквивалентно NULL).

Но как проверить, является ли shared_pointer NULL?

Вернет ли это правильное значение?

boost::shared_ptr<Blah> blah;
blah.reset()
if (blah == NULL) 
{
    //Does this check if the object was reset() ?
}
4b9b3361

Ответ 1

Использование:

if (!blah)
{
    //This checks if the object was reset() or never initialized
}

Ответ 2

if blah == NULL будет работать нормально. Некоторые люди предпочли бы его тестировать как bool (if !blah), потому что он более явный. Другие предпочитают последнее, потому что оно короче.

Ответ 3

Вы можете просто проверить указатель как логическое: он будет оценивать до true, если он не равен null и false, если он равен null:

if (!blah)

boost::shared_ptr и std::tr1::shared_ptr оба реализуют idoom safe-bool, а С++ 0x std::shared_ptr реализует явный оператор преобразования bool. Они позволяют использовать shared_ptr как булев при определенных обстоятельствах, подобно тому, как обычные указатели могут использоваться как логические.

Ответ 4

Как показано в boost::shared_ptr<> синопсисе класса, существует оператор safe-bool:

operator unspecified-bool-type() const; // never throws

Итак, используйте shared_ptr<>, как если бы это был bool:

if (!blah)
{
    // this has the semantics you want
}