【发布时间】:2015-02-25 22:46:09
【问题描述】:
我有以下程序:
#include<iostream>
using namespace std;
class A {
protected:
A() { cout << "Executing A()" << endl; }
public:
~A() { cout << "Executing ~A()" << endl; }
};
class B : public A {
public:
B() { cout << "Executing B()" << endl; }
~B() { cout << "Executing ~B()" << endl; }
};
class C : public B {
public:
C() { cout << "Executing C()" << endl; }
~C() { cout << "Executing ~C()" << endl; }
};
void someFunc() {
A a = C();
}
int main() {
someFunc();
return 0;
}
打印以下内容:
为什么~A() 被调用了两次?
【问题讨论】:
-
您的赋值可能会触发复制构造函数(当您将
C()分配给a但您的输出代码对此(或赋值运算符)不可见。请参阅 en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29 -
@Mati:不要使用图像粘贴纯文本。只需粘贴纯文本即可。
-
@Deduplicator 很高兴知道!
标签: c++ class visual-c++ scope destructor