c++ - 当函数按值返回时是否执行复制构造函数?
问题描述
在这里,我尝试使用对象数组,并想看看它们是如何构造和破坏的。我重载了返回类型的赋值运算符是按值调用的,因此必须使用复制构造函数复制该值。我有自己的复制构造函数,但它不会执行复制构造函数,但是对象被破坏了,为什么?
#include<iostream>
using namespace std;
class my
{
int i;
public:
my(){
cout<<"Constructor\n";
}
my(int a):i(a){
cout<<"Parameterized Constructor\n";
}
my(my& m)
{
cout<<"copy constructor...........\n";
}
void display()
{
cout<<i<<endl;
}
~my()
{cout<<"Destructor\n";
}
my operator=(const my& m)
{
i=m.i;
cout<<"Overloading Assignment Operator\n";
}
};
main()
{
my *array=new my[2];//calls constructor 2times
for(int i=0;i<2;i++)
{
array[i]=my(i+10);//overloading assignment operator
cout<<"END\n\n";
}
for(int i=0;i<2;i++)
{
array[i].display();
}
delete [] array;
}
输出:
Constructor
Constructor
//for
Parameterized Constructor
Overloading Assignment Operator
Destructor
Destructor
END
Parameterized Constructor
Overloading Assignment Operator
Destructor
calling of destructor without constructing.
Destructor
END
10
11
Destructor
Destructor
解决方案
允许编译器避免为返回值创建临时对象,即使它们有副作用。
推荐阅读
- symfony - 匹配原则扩展配置
- python-3.x - 无法使用 Python 显示散景图
- delphi - 为什么不按alt键的快捷方式
- typescript - 重命名从 TypeScript 内部库隐式导入的符号
- azure - 如何在 Azure 中对 SQL 数据库资源进行可用性测试?
- r - 用于多行数据的 ggplot 线图 - 与 matplot 等效的 ggplot
- excel - 切片器更改时运行宏
- macos - 为什么我无法在 macOS 上更改环境变量 $USERNAME?
- c++ - 如何提取将使用 clang 生成的所有符号?
- javascript - Select2:为什么复制的代码演示不起作用?