gpt4 book ai didi

c++ - 复制构造动态分配对象的问题

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

我正在学习 C++ 简介,但我遇到了一个涉及使用复制构造函数的问题。练习的想法是构造一个电话对象,它本身构造一个外壳、一根电缆、一个拨号器和一个耳机。这一切工作得很好并且很有启发性,因为每个类在被调用时都会给出一个提示,但是当我尝试以下操作时出现了问题。

Dialer 构建了一个包含 12 个 Button 的数组。 Buttons 类如下所示:

class Button {
public:

Button() { std::cout << "Button Constructor " << this << std::endl ; }
Button(const Button&) { std::cout << "Button Copy Constructor " << this << std::endl ; }
~Button() { std::cout << "Button Destructor " << this << std::endl ; }

private:

} ;

我在 Dialer 类中的第一个镜头使用 Buttons 的静态分配,效果很好。代码:

class Dialer {
public:

Dialer() { std::cout << "Dialer Constructor " << this << std::endl ; }
Dialer(const Dialer &dialer) : buttons(dialer.buttons) { std::cout << "Dialer Copy Constructor " << this << std::endl ; }
~Dialer() { std::cout << "Dialer Destructor " << this << std::endl ; }

private:

Button buttons[12] ;

} ;

练习的下一步是动态分配按钮,这就是乐趣的开始。以下代码有效:

class Dialer {
public:

Dialer() : buttons(new Button[12]) { std::cout << "Dialer Constructor " << this << std::endl ; }

Dialer(const Dialer &dialer) {
buttons = new Button[12];
std::cout << "Dialer Copy Constructor " << this << std::endl ;
}

~Dialer() {
delete[] buttons;
std::cout << "Dialer Destructor " << this << std::endl ;
}

private:

Button* buttons ;
} ;

但是当然这不会调用 Button 复制构造函数。我已经尝试了很多事情:

buttons = new Button(dialer.buttons)[12];
buttons = new Button(dialer.*buttons)[12];
*buttons = dialer.*buttons;

但我就是想不通。所有这些尝试都会报错,即 Button 类中没有定义匹配的函数。

如果有任何帮助,我将不胜感激:)

干杯,将军公爵

最佳答案

以下代码格式调用复制构造函数。

Button a;
Button b=a; //calls the copy constructor of Button class
Button c;
c = a; // calls the overload assignment operator, but not the copy constructor.!

在您的例子中,对于实例数组,

buttons = new Button[12];

for (int i=0;i<12;i++)
{
buttons[i] = dialer.buttons[i];
}

关于c++ - 复制构造动态分配对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427472/

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