std::unique_ptr<X> ptr;
Будет ли ptr == nullptr возвращать true для любого типа X?
struct A {std::unique_ptr<X> ptr;}
A; A(); A{};
А в таких случаях для A.ptr?
Стандарт явно говорит о конструкторе unique_ptr по умолчанию:
2 Effects: Constructs a unique_ptr object that owns nothing, value-initializing the stored pointer and
the stored deleter.
3 Postconditions: get() == nullptr. get_deleter() returns a reference to the stored deleter.
Так что да.
В качестве примера:
struct A {std::unique_ptr<char> ptr;};
int main(int argc, const char * argv[])
{
unique_ptr<int> x;
cout << (x == nullptr) << endl;
A a;
A b{};
cout << (a.ptr == nullptr) << endl;
cout << (b.ptr == nullptr) << endl;
}
@Harry уже описал, как ведёт себя конструктор по умолчанию для std::unique_ptr. Я же хочу добавить, что типа, имеющего конструктор, совершенно не важно как вы будете определять переменную:
A a1;
A a2 = A();
A a3 = A{};
Во всех случаях будет вызван конструктор A по умолчанию, который в данном случае вызовет конструктор std::unique_ptr по умолчанию для члена ptr.
Особое внимание можно уделить разве что записям вида:
A a4();
A a5{};
В случае a4 не будет создана никакого объекта, а будет всего лишь объявление функции с именем a4, не принимающей аргументов и возвращающей тип A. В случае a5 создастся объект, идентичный a1, a2, a3.
Про a4 более подробно можно ознакомиться в вики: Most vexing parse.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости