析构函数的奇怪调用顺序
Strange call order of destructors
我知道当我将对象传递给具有没有引用的参数的函数时,将调用复制构造函数;当我在函数中返回对象时也是如此。当我尝试将函数分配给本地对象时,出现问题。析构函数的顺序不是通常的顺序,我不知道为什么。
class myClass{
int x;
static int y;
string name;
public:
myClass(int i=10):x(i){ y++;cout<<"constr "<<y<<"n"; name= "constr" +to_string(y) +'n';}
myClass(const myClass&ob){y++; x= ob.x; cout<<"copy-c "<<y<<" n"; name= "copy-c" +to_string(y) +'n';}
~myClass(){cout<<"destr " +name +'n'; }
};
int myClass::y;
myClass f(myClass ob)
{
return ob;
}
//main
myClass ob;
myClass s=f(ob);
输出:
结构 1
复制-C 2
复制-C 3
Destr copy-c2
Destr copy-C3
Destr Constr1
省略返回值的副本;f
的返回值直接构造在 s
的空间中。
所以,constr 1
是ob
的构造函数。 copy-c 2
是临时传递给f
。 copy-c 3
是f
返回值的构造函数,也是s
的构造函数。在分号处,临时copy-c 2
被破坏。在main
结束时,s
和ob
按此顺序被摧毁。
相关文章:
- 以 f() + g() 调用顺序的 C++ 函数
- 如何创建跟踪以显示存在递归的调用顺序
- 析构函数的奇怪调用顺序
- 输入法管理器函数 - 平假名到汉字候选列表 c++ covnersion 的正确调用顺序
- 构造函数的调用顺序
- 模板func和非模板func调用顺序
- C++对返回*this的成员函数的重复调用顺序
- 在C++中,析构函数的调用顺序和成员变量的销毁顺序是什么
- XSetWMProtocols 和 glXCreateContext 在多线程环境中调用顺序
- __attribute__((构造函数)) 调用顺序混淆
- 此代码是否依赖于函数调用顺序未定义的行为
- 如何强制实施析构函数的调用顺序
- C++在递归函数中平衡了树/调用顺序
- 构造调用顺序(C++)
- 无法理解析构函数调用顺序
- 构造函数调用顺序与组合
- 构造函数/析构函数在堆栈上的调用顺序
- 递归到迭代,保留变量和调用顺序
- Qt队列连接中的插槽调用顺序
- visual studio-C++函数调用顺序(boost)-混乱