不理解以下C++代码中复制构造的用法[已关闭]

6uxekuva  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(126)

已关闭,此问题需要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的指针。指针实际上只是一个地址,所以我的问题是在哪里调用复制构造函数?复制是怎么进行的?
我不明白复制构造是如何被调用的,它是否是一个深度复制?

pvcm50d1

pvcm50d11#

首先,复制发生在get_copy()方法中。

A get_copy(A* pointer){
  return *pointer;
}

*pointer取消引用指针以直接获取对象。然后return将返回该对象的新副本,因为它将返回该对象的新临时局部变量。这就等于写:

A get_copy(A* pointer){
  auto a_copy = *pointer;
  return a_copy;
}

这将通过调用复制构造函数创建一个新的A对象,复制构造函数在这里被冗余地定义为A(const A&) = default;
现在,不要批评没有更多的背景,但我不知道什么是点,这整个方法是在所有,因为它是更多的工作比需要的。要创建副本,只需:

A test;
auto test_ptr = &test;
auto test_copy = *test_ptr;

取消引用指针并将其分配给新对象将导致它复制

相关问题