gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:36:59 24 4
gpt4 key购买 nike

假设我有这门课:

class MyClass
{
private:
bool mIsMeter = false;

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

}
};

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

MyClass mMyClass;

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

我可以在 myClasses.cpp 中做到这一点,但它会首先创建 mMyClass 的堆栈翻转,并设置为 false,然后重新使用 mMyClass = MyClass(true) 分配它。

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

最佳答案

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

MyClass mMyClass(true);

请注意,这假设 mMyClass 是一个全局(或命名空间范围)变量。如果是这种情况,请注意它将在包含 header 的每个 文件中定义。因此,如果您将它包含在多个文件中,就会出现链接器错误(多重定义)。

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

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

但是,您也可以将其初始化为包含类的构造函数的内存初始化器列表的一部分。那将是这样的:

class OtherClass
{
MyClass mMyClass;

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

关于c++ - 如何从 Header 实例化 Class 选择合适的 CTOR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com