gpt4 book ai didi

c++ - 成员初始值设定项列表的使用如何防止在 C++ 中创建冗余对象?

转载 作者:行者123 更新时间:2023-11-30 02:17:13 25 4
gpt4 key购买 nike

<分区>

我有一个关于使用和不使用构造函数成员初始化列表初始化对象的区别的问题。

在下面的代码片段中有两个类Test1Test2,每个类都有两个构造函数,这两个类的对象是在另一个类的默认构造函数中创建的 >示例Test1 的对象是使用成员初始化列表中的一个参数创建的,而 Test2 的对象是使用 Example 的构造函数主体中的一个参数创建的。

class Test1 {
public:
Test1() { cout << "Test1 is created with no argument"; }
Test1(int a) { cout << "Test1 is created with 1 argument"; }
};

class Test2 {
public:
Test2() { cout << "Test2 is created with no argument"; }
Test2(int a) { cout << "Test2 is created with 1 argument"; }
};

class Example {
public:
Test1 objTest1;
Test2 objTest2;

Example() : objTest1(Test1(50))
{
objTest2 = Test2(50);
}
};

int main()
{
Example e;
}

上面代码的输出是:

Test1 是用 1 个参数创建的

Test2 是在没有参数的情况下创建的

Test2 是用 1 个参数创建的

我的问题

  • 为什么 Test2 的对象被创建了两次? (在没有成员初始值设定项的情况下创建的那个。)
  • Test2 的冗余对象发生了什么?它是否仍然占用一些内存?
  • 成员初始化器列表如何初始化类成员变量?
  • 使用成员初始值设定项列表是否有任何性能优势? (因为 Test1 只创建一次)

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