我有以下代码,不确定unique_ptr的初始化方式。
a.h
#ifndef EXPERIMENTAL_USERS_ALOUA_CPP_PROTECTED_CTOR_INTIALIZE_A_H_
#define EXPERIMENTAL_USERS_ALOUA_CPP_PROTECTED_CTOR_INTIALIZE_A_H_
#include <iostream>
#include <memory>
class A {
public:
void help() { std::cout << "help ! \n "; }
protected:
A() = default;
};
#endif // EXPERIMENTAL_USERS_ALOUA_CPP_PROTECTED_CTOR_INTIALIZE_A_H_
main.cc
#include <iostream>
#include <memory>
#include "experimental/users/aloua/cpp/protected_ctor_intialize/a.h"
struct B {
std::unique_ptr<A> a;
// the default constructor
// A aa;
};
int main() {
B b;
b.a->help(); // this outputs "help !"
}
该程序如何编译和运行而没有任何问题?
是因为std::unique_ptr<A> a
是根据value initialization初始化为零,而否实际的构造函数实际上是被调用的?
===========
测试了指针实际上是 nullptr 。