gpt4 book ai didi

c++ - 为什么这里不调用拷贝构造函数?

转载 作者:太空狗 更新时间:2023-10-29 23:35:51 26 4
gpt4 key购买 nike

我正在参加 C++ 快速复习类(class)。试图复习一些基本概念。当我运行下面的程序时,我看到两个问题:1. Copy CC 因为某些原因没有调用。2. testCC()函数退出后程序因故崩溃。

感谢任何帮助!

class A
{
public:
A()
{
this->ptr = new int[10];
}
~A()
{
delete[] ptr;
}
A(const A &obj)
{
std::cout << "Copy CC called\n";
for (int i = 0; i < 10; i++)
{
ptr[i] = obj.ptr[i];
}
}
void set()
{
for (int i = 0; i < 10; i++)
{
ptr[i] = rand() % 10;
}
}
void print()
{
for (int i = 0; i < 10; i++)
{
std::cout << ptr[i] << " ";
}
std::cout << "\n";
}
private:
int *ptr;

};

void testCC()
{
A a1,a2;
a1.set();
std::cout << "Contents of a1\n";
a1.print();
a2 = a1;
std::cout << "Contents of a2\n";
a2.print();
}

最佳答案

复制赋值和复制构造不是一回事。

a2 = a1 正在调用 a2.operator=(a1)(复制赋值),而不是复制构造函数。您可以在 A 类中这样定义复制赋值运算符:

A & operator=(A const & obj)
{
// Perform copy...

return *this;
}

无论哪种方式,你的复制构造函数都是错误的(你在使用它之前没有初始化 ptr )所以即使你的复制构造函数被使用,你也会调用未定义的行为并且可能会崩溃。

关于c++ - 为什么这里不调用拷贝构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28122942/

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