gpt4 book ai didi

c++ - 不使用复制构造函数

转载 作者:行者123 更新时间:2023-11-28 02:49:30 25 4
gpt4 key购买 nike

我是 C++ 的新手,正在研究复制构造函数。在这个简单的示例中,我想检查明确定义的复制构造函数是否真的处于事件状态。我在那里放了一个 cout-string,但我看不到它被打印出来了。

问题:我想知道,为什么没有使用复制构造函数?因为在 main 函数体中创建了一个对象的拷贝。

Person timmy_clone = timmy;

完整代码如下:

#include <iostream>

class Person {
public:
int age;

Person(int a) {
this->age = a;
}

Person(const Person& person) {
std::cout << "hello\n";
}
};

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 <<"hello\n";}

~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];
}

最佳答案

您的代码按预期工作。参见 here .

也许你已经混淆了 copy-elision此处不适用。

关于c++ - 不使用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com