首页 > 解决方案 > 当函数按值返回时是否执行复制构造函数?

问题描述

在这里,我尝试使用对象数组,并想看看它们是如何构造和破坏的。我重载了返回类型的赋值运算符是按值调用的,因此必须使用复制构造函数复制该值。我有自己的复制构造函数,但它不会执行复制构造函数,但是对象被破坏了,为什么?

#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

标签: c++

解决方案


允许编译器避免为返回值创建临时对象,即使它们有副作用。


推荐阅读