以下代码在 GCC 和 vc9 上编译时给出了不同数量的析构函数。AFAIK 在 vc9 上运行时显示 5 个析构函数,我理解。调用 + 重载运算符,并创建两个对象,返回时创建一个临时对象。这使得销毁 3 个对象成为可能。当调用重载 = 运算符时,会创建一个对象,并在返回时再次创建一个临时对象。这总共有五个破坏,不包括在 main 开始时创建的三个对象。
但是当我在 GCC 上编译时,我得到 3。
这让我猜测函数终止并返回时没有创建临时对象?或关于编译器之间不同行为的问题。我只是不知道,一些澄清会很好。
#include <iostream>
using namespace std;
class planetCord {
double x, y, z;
public:
planetCord() { x = y = z = 0; }
planetCord(double j, double i, double k) { x = j; y = i; z = k; }
~planetCord() { cout << "destructing\n"; }
planetCord operator+(planetCord obj);
planetCord operator=(planetCord obj);
void show();
};
planetCord planetCord::operator +(planetCord obj) {
planetCord temp;
temp.x = x + obj.x;
temp.y = y + obj.y;
temp.z = z + obj.z;
return temp;
}
planetCord planetCord::operator =(planetCord obj) {
x = obj.x;
y = obj.y;
z = obj.z;
return *this;
}
void planetCord::show() {
cout << "x cordinates: " << x << "\n";
cout << "y cordinates: " << y << "\n";
cout << "z cordinates: " << z << "\n\n";
}
int main() {
planetCord jupiter(10, 20, 30);
planetCord saturn(50, 100, 200);
planetCord somewhereDark;
jupiter.show();
saturn.show();
somewhereDark.show();
somewhereDark = jupiter + saturn;
jupiter.show();
saturn.show();
somewhereDark.show();
return 0;
}