我运行了以下代码
#include <iostream>
using namespace std;
class Count
{
private:
int count;
public:
//Constructor
Count():count(0) { cout << "Constructor called" << endl; }
//Destructor
~Count() { cout << "Destructor called" << endl; }
//Display the value.
Count display()
{
cout << "The value of count is " << count << endl;
return *this;
}
};
int main()
{
Count C;
C.display();
}
结果: -
Constructor called
The value of count is 0
Destructor called
Destructor called
在上面的例子中,析构函数被调用两次,一次用于销毁&#34;这个&#34;对象和一个从main返回。
我的观察是否正确?
任何人都可以解释我在这个过程中创建的临时对象,如果它被创建,如果创建?
答案 0 :(得分:3)
您正在从display()
方法返回副本,因此它也需要被破坏。所以,在你的主体中你实际上有两个对象,一个 - 隐含地。
答案 1 :(得分:1)
析构函数被调用两次,因为display
函数返回调用它的Count
实例的副本。因此,C
内的main
实例会将其销毁。
2个实例= 2个析构函数调用。
如果指定并实现函数以返回Count
的实例,那么它将执行此操作。如果您不想要此行为,请将返回类型更改为无效并且不返回任何内容 - 那么您的代码将只包含一个实例C
。
答案 2 :(得分:0)
您的代码
Count display() {
// ^^^^^
cout << "The value of count is " << count << endl;
return *this; // <<<<<<
}
创建一个返回并立即销毁的实例的隐式副本,因此第二个析构函数调用。
答案 3 :(得分:0)
是的。
您的函数display()
创建了一个副本,它创建了第二个对象。
如果您返回reference
,则无法获得副本。
Count& display() { return *this; }