C++函数返回值

c++的函数返回值是一个对象,那么就会调用这个对象的复制构造函数,将这个函数的栈中的返回值临时变量,复制到调用者的栈中

那么就是返回值复制在栈上吗?然后赋值给m3吗?
对的,返回值会在栈上创建一个临时对象,然后将临时对象的值赋值给m3,因为这里没有使用动态内存分配,所以返回的对象会在函数结束时被销毁。
如果使用了new,那么就需要在函数外部释放这个内存,可以通过传出地址释放,或者其他方法。
返回值复制到新的栈上的过程会调用复制构造函数
因此,当一个类需要使用动态内存分配或者需要作为返回值返回时,最好定义一个合适的复制构造函数来确保正确的行为。
如果没有写这个复制函数会怎么样?
如果没有写复制构造函数,则会使用默认的浅拷贝(逐个复制成员变量的值),这可能会导致两个对象指向同一块内存空间,从而出现意想不到的问题。因此,在定义了动态内存分配、指针等需要特殊处理的成员变量时,建议自定义复制构造函数。

但是
在C++中,当一个函数返回一个对象时,如果该对象的返回值优化(Return Value Optimization,RVO)被激活,通常不会涉及调用对象的复制构造函数。

你可能感兴趣的:(C++,c++,java,jvm)