c++ - C++函数调用,为什么要使用析构函数?
问题描述
我试图理解 C++ 中更好的函数调用。我有以下代码:
class A{
public:
A() { cout << "hello\n"; }
A(const A& obj) { cout << "world\n"; }
~A() { cout << "bye\n"; }
virtual void print() { cout << "a\n"; }
};
A foo(A aobj)
{
aobj.print();
return aobj;
}
int main(){
A a,b,c;
foo(a);
system("pause");
return 0;
}
输出是:
hello //from calling A's default constructor
hello
hello
world //because we pass 'a' by value in funtion foo so the copy constructor is used
a
world //because foo returns by value so the copy constructor is used again
bye //?
bye //?
有人可以解释为什么最后调用了两次析构函数吗?是因为两个复制构造函数调用吗?
感谢您的时间!
解决方案
“再见”被打印 5 次,因为~A()
也被称为 5 次。对于对象a
, b
,c
析构函数称为 one。然后,当您按值传递a
时,会创建一个副本foo
,然后将其销毁。最后, foo 的返回类型是一个实例,A
当执行移到下一行时,该实例被销毁。因此,总共~A()
将被调用 5 次。
在对象的生命周期结束时调用析构函数以释放对象使用的内存。
推荐阅读
- java - 将文字分配给 Float 时出现类型不匹配错误
- xml - 我如何指定要在 powershell selectnodes 中读取的 xml 属性
- kotlin - kotlin 中与平台无关的 Web 框架
- python - 在烧瓶上执行 py 脚本的问题
- ios - 核心数据对象保存没有错误,但数据检索方法不会立即显示保存的结果
- sql - DB2 SQLPL - 无法退出无限循环
- python - 错误:在 Python 3.8 (Windows) 上安装 Kivy 时命令出错,退出状态为 255
- python - 有没有办法从列表中获取一个元素并以变量的名称使用它?
- macos - 在 macOS 上启动 Minikube 时权限被拒绝
- r - 地图图例所需的 R 代码帮助不在正确的位置