Man*_*mar 1 c++ oop anonymous copy-constructor c++11
在工作的时候,我遇到了一段奇怪/令人困惑的代码,我觉得这些代码与匿名 对象生命周期概念有关.以下是示例代码:
#include<iostream>
#include<string>
class A {
private:
int i;
std::string s;
public:
A(int ii, std::string ss = "Hello") { i = ii; s = ss; }
void Display() { std::cout<<i<<"\n"; }
~A() { std::cout<<"A::~A()"<<"\n";}
};
void function()
{
A a = 1;
//A a = A(1);
a.Display();
}
int main()
{
function();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
VS2010中的输出1(如果A a = 1)
1
A::~A()
Run Code Online (Sandbox Code Playgroud)
VS2010中的输出2(如果A a = A(1))
A::~A()
1
A::~A()
Run Code Online (Sandbox Code Playgroud)
当析构函数被调用两次(包括匿名)对象时,output2完全有意义.
但是输出1让我困惑,无法理解为什么析构函数被调用一次(不是匿名)对象.
A a = 1;
Run Code Online (Sandbox Code Playgroud)
上面的行将调用类的copy-constructor(A(const A& rhs))A,编译器应该使用参数创建匿名对象1.如果是这种情况,析构函数应该被调用两次.
有人可以解释一下这种行为吗?可能是我遗漏了一些明显的东西.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |