具有无法访问的对象构造函数的unique_ptr字段

时间:2018-12-13 18:14:40

标签: c++ c++11

我有以下代码,不确定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

0 个答案:

没有答案