未使用复制构造函数

Copy-constructor is not used

本文关键字:构造函数 复制 未使用      更新时间:2023-10-16

我对C++和学习复制构造函数相对陌生。在这个简单的例子中,我想检查显式定义的复制构造函数是否真的是活动的。我在那里放了一根细绳,但我看不出它是印刷的。

问题:我想知道,为什么没有使用复制构造函数?由于在main函数体中进行对象的复制

Person timmy_clone = timmy;

这是完整的代码:

#include <iostream>
class Person {
public:
   int age;
   Person(int a) {
      this->age = a;
   }
   Person(const Person& person) {
      std::cout << "hellon";
   }
};
int main() {
   Person timmy(10);
   Person sally(15);
   Person timmy_clone = timmy;
   std::cout << "timmy age " << timmy.age << " " << "sally age " << sally.age << " " <<   "timmy_clone age " << timmy_clone.age << std::endl;
   timmy.age = 23;
   std::cout << "timmy age " << timmy.age << " " << "sally age " << sally.age << " " << "timmy_clone age " << timmy_clone.age << std::endl;
   std::cout << &timmy << std::endl;
   std::cout << &timmy_clone << std::endl;
}

编辑:我使用MinGW并使用-o编译

g++main.cpp-o main.exe

edit2:这是另一个代码片段,其中使用了显式定义的复制构造函数。仍然想知道为什么在这里使用它而不是在第一个例子中?

   #include <iostream>
 class Array {
 public:
   int size;
   int* data;
  Array(int sz)
    : size(sz), data(new int[size]) {
  }
  Array(const Array& other)
     : size(other.size), data(other.data) {std::cout <<"hellon";}
~Array()
{
    delete[] this->data;
}
 };

int main()
{
   Array first(20);
   first.data[0] = 25;
  {
    Array copy = first;
    std::cout << first.data[0] << " " << copy.data[0] << std::endl;
  }    // (1)
   first.data[0] = 10;    // (2)
  std::cout << "first data[0]: " << first.data[0];
}

您的代码正在按预期工作。请参见此处。

也许你混淆了copy-elision,它在这里不适用。