已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
3小时前关闭
Improve this question
#include<cstdio>
struct A{
A() = default;
A(const A&) = default;
};
A get_copy(A* pointer){
return *pointer;
}
int main(){
A test;
auto test_ptr = &test;
auto test_copy = get_copy(test_ptr);
return 0;
}
现在,当调用get_copy()
函数时,我只传递一个指向当前对象test
的指针。指针实际上只是一个地址,所以我的问题是在哪里调用复制构造函数?复制是怎么进行的?
我不明白复制构造是如何被调用的,它是否是一个深度复制?
1条答案
按热度按时间pvcm50d11#
首先,复制发生在
get_copy()
方法中。*pointer
取消引用指针以直接获取对象。然后return
将返回该对象的新副本,因为它将返回该对象的新临时局部变量。这就等于写:这将通过调用复制构造函数创建一个新的
A
对象,复制构造函数在这里被冗余地定义为A(const A&) = default;
现在,不要批评没有更多的背景,但我不知道什么是点,这整个方法是在所有,因为它是更多的工作比需要的。要创建副本,只需:
取消引用指针并将其分配给新对象将导致它复制