C++ 当函数按值返回时是否执行复制构造函数?
在这里,我尝试使用对象数组,希望了解它们是如何构造和销毁的。我重载了返回类型的赋值运算符为“按值调用”,因此必须使用复制构造函数复制该值。我有自己的复制构造函数,但它不会执行复制构造函数,但对象是析构函数为什么C++ 当函数按值返回时是否执行复制构造函数?,c++,C++,在这里,我尝试使用对象数组,希望了解它们是如何构造和销毁的。我重载了返回类型的赋值运算符为“按值调用”,因此必须使用复制构造函数复制该值。我有自己的复制构造函数,但它不会执行复制构造函数,但对象是析构函数为什么 #include<iostream> using namespace std; class my { int i; public: my(){ cout<<"Constructor\n"; } my(in
#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;
}
允许编译器避免为返回值创建临时对象,即使它们有副作用。允许编译器避免为返回值创建临时对象,即使它们有副作用。
my(my&m)
不是复制构造函数。请回顾C++教程中给出副本构造函数示例的章节,并查看是否可以区分它们如何声明以及如何不复制声明的构造函数。此外,即使在函数返回值上有一个有效的复制构造函数,也允许编译器(或有时需要)来逐个拷贝,这取决于C++版本。这不是一个简单的主题。赋值运算符没有返回运算符,因此它是未定义的行为。不要忽略编译器警告。它们是防止逻辑错误的第一道防线。如果代码未生成警告,请查看编译器文档,了解如何提高编译器警告级别。提高警告级别,然后解决警告。一旦警告得到处理,您可能会看到也可能看不到预期的结果。正如Sam上面所说,它变得复杂了。@SamVarshavchik您能详细说明为什么my(my&m)
不能是复制构造函数吗?@SamVarshavchik如果您暗示参数必须是const
,。my(my&m)
不是复制构造函数。请回顾C++教程中给出副本构造函数示例的章节,并查看是否可以区分它们如何声明以及如何不复制声明的构造函数。此外,即使在函数返回值上有一个有效的复制构造函数,也允许编译器(或有时需要)来逐个拷贝,这取决于C++版本。这不是一个简单的主题。赋值运算符没有返回运算符,因此它是未定义的行为。不要忽略编译器警告。它们是防止逻辑错误的第一道防线。如果代码未生成警告,请查看编译器文档,了解如何提高编译器警告级别。提高警告级别,然后解决警告。一旦警告得到处理,您可能会看到也可能看不到预期的结果。正如Sam上面所说,它变得复杂了。@SamVarshavchik您能详细说明为什么my(my&m)
不能是复制构造函数吗?@SamVarshavchik如果您暗示参数必须是const
。
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