64,651
社区成员
发帖
与我相关
我的任务
分享
https://zh.cppreference.com/w/cpp/language/copy_elision
因为给A加了一个字段B,B具有T(const T&)形式的拷贝构造函数,所以A的隐式拷贝构造将会是A(const A&)形式,
所以,会引起拷贝消除。class B {
public:
B(){}
B(const B& ){}
};
class A {
B b1;
public:
A(int n = 10) { cout << "默认构造" << endl; }
/*这里如果注释掉了下边的拷贝函数,运行程序的时候他会调用两次析构函数,只调用一次默认构造函数,运行是在vs2019中,加了个断点看着他把自己析构了两次,把下边的注释调结果调用一次构造函数,调用一次析构函数,我把这个在网页上找了个在线的编译器运行了一下,不管注不注释下面的拷贝函数结果都是调用一次构造函数一次析构函数,到这一头雾水,我也没搞懂那个add函数里传的是什么意思,是照着老师出的题写的,写的不是很全,剩了些参数。
*/
~A() {
cout << this << endl;
cout << "析构函数" << endl;
}
};
void add(A a) {
}
int main()
{
add(A(10));
return 0;
}