初始化结构的私有成员

cyb*_*cop 3 c++ constructor struct

现在我有

Private:
Struct PageManagerData
{
   char name[20];
   IPage* storePagePtr;
}
Run Code Online (Sandbox Code Playgroud)

我想将name初始化为类似于'\0'storePagePtr NULL但现在我无法在构造函数中访问这些值以初始化它们.我该怎么做?

seh*_*ehe 8

您的代码看起来不像有效的C++

struct PageManagerData
{
   PageManagerData() : name { 0 }, storePagePtr(nullptr) { }
private:
   char name[20];
   IPage* storePagePtr;
};
Run Code Online (Sandbox Code Playgroud)

这仍然不是典型的C++:

struct PageManagerData
{
private:
   std::string name;
   std::unique_ptr<IPage> storePage;
};
Run Code Online (Sandbox Code Playgroud)

这避免了大量潜在的内存管理/初始化/缓冲区溢出错误.具体来说,它利用零度规则:您可以在不实施特殊成员的情况下实现

  • (移动)构造函数
  • (移动)作业
  • 析构函数

并享受强大的对象值语义,没有泄漏和UB.