c++ - 复制构造函数

标签 c++ copy-constructor deep-copy

class Gun{
private:
    int bullet;
public:
    Gun(int bnum) : bullet(bnum) { }
};

class Police{
private:
    Gun * pistol;
public:
    Police(int bNum) : {
        if(bNum>0)
            pistol = new Gun(bNum);
        else
            pistol=NULL;
    }
    Police(const Police& ref){
        pistol=new Gun(*(ref.pistol)); //Confused about this part.

    }
};

我目前正在学习 C++,我对 Police 的复制构造函数中发生的事情有点迷茫。我相信 Gun 的构造函数只接受整数,但如何将 *(ref.pistol) 作为参数分配给它?我认为 *(ref.pistol) 是一个 Gun 对象,而不是一个整数。

最佳答案

如果你自己没有显式声明一个复制构造函数,编译器总是隐式声明一个复制构造函数(尽管在某些情况下它可以被删除)。您感到困惑的那一行调用了这个隐式声明的复制构造函数。

这个隐式声明的复制构造函数是公共(public)的,并且(如果使用它)它只是执行成员复制,,就好像您已经编写了

public:
    Gun(const Gun& other): bullet(other.bullet) {}

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

相关文章:

c++ - Boost-graph:当我的图形使用listS作为VertexList时,如何调用depth-first-search()?

C++ 使用 iter_swap 改变 vector 的顺序

c++ - 如何检查函数中的模板参数是否匹配给定类型别名的特化

c++ - 什么是三法则?

c++ - C++中的可复制数据类

c++ - 如何在 C++ 中将十六进制字符串转换为字节字符串?

c++ - 具有内存分配和释放的复制构造函数

c++ - 使用指针基类的 =operator 的多态性

python - 如何在 Python 中对函数进行深度复制?

delphi - delphi中的对象复制