gpt4 book ai didi

C++构造函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:37 24 4
gpt4 key购买 nike

我用 C++ 编写了这个小代码片段,输出也已附上。我不明白为什么构造函数只被调用一次,而我可以看到对析构函数进行了两次调用。

据我所知,默认构造函数和重载赋值运算符应该在第 28 行调用。

有人可以解释一下吗:

  1 #include <iostream>
2 using namespace std;
3
4 class ABC {
5 char c;
6 public:
7 ABC() {
8 cout << "default" << endl;
9 }
10 ABC(char c) {
11 this->c = c;
12 cout << c << endl;
13 }
14 ~ABC() {
15 cout << hex << this << " destructor " << c << endl;
16 }
17 void method() {
18 cout << "method" << endl;
19 }
20 void operator= (const ABC& a) {
21 cout << "operator" << endl;
22 }
23
24 };
25
26 int main() {
27 ABC b('b');
28 ABC a = b;
29 }

Output in g++ version 4.0.1:
~/src$ g++ test.cpp
~/src$ ./a.out
b
0xbffff0ee destructor b
0xbffff0ef destructor b

最佳答案

ABC a = b;

这是 拷贝构造函数,不是赋值运算符!你可以像这样重新定义它,你所拥有的是编译器生成的:

ABC(const ABC& other)
{
c = other.c;
cout << c << " copy constructor" << endl;
}

如果你真的坚持不使用复制构造函数,你可以在你的类中添加转换运算符,而忘记复制构造函数!

operator char()
{
return c;
}

关于C++构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1183076/

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