如何从 Header 实例化 Class 选择合适的 CTOR?

How to instance Class from Header selecting a proper CTOR?

假设我有这个 class:

class MyClass
{
private:
    bool mIsMeter = false;

public:
    MyClass(bool isMeter = false) {
        mIsMeter = isMeter;
    }
    ~MyClass() {

    }
};

现在,在 myClasses.h 内,我写:

MyClass mMyClass;

它使用堆栈中的默认 CTOR 实例 class(在我的示例中,使用 isMeter = false)。如果我想(从那里)初始化 class 传递 true 作为参数怎么办?

我可以在 myClasses.cpp 中完成,但它会首先使用 false 创建 mMyClass 的堆栈转换,然后使用 mMyClass = MyClass(true) re-allocate ].

这不是浪费资源吗?不能只从 header 初始化它吗?

每个变量定义都可以包含一个初始化程序。在你的情况下,你会这样做:

MyClass mMyClass(true);

请注意,这假定 mMyClass 是全局(或 namespace-scope)变量。如果是这种情况,请注意它将在包含 header 的 each 文件中定义。因此,如果您将其包含在多个文件中,则会出现链接器错误(多重定义)。

如果 mMyClass 实际上是在另一个 class 定义中声明的成员(以 m 开头的名称似乎表明),那么 multiple-definition 注释当然不会'申请。仍然可以在声明时初始化 mMyClass,但您必须使用 copy-initialisation 或 list-initialisation:

// either
MyClass mMyClass = true; // this one might call copy ctor
// or
MyClass mMyClass{true}; // this one guarantees one ctor call only

但是,您也可以将其初始化为包含 class 的构造函数的 mem-initializer-list 的一部分。那将是这样的:

class OtherClass
{
  MyClass mMyClass;

public:
  OtherClass(int i) : mMyClass(i > 42) {}
};