C++ primer 第四版 第 13.5.2节 第一个类的复制构造函数定义看不明白.
class HasPtr{
public:
HasPtr (const int &p, int i): ptr(new int(p)), val(i) {}
HasPtr (const HasPtr &orig): ptr(new int (*orig.ptr)), val(orig.val) {}
private:
int *ptr;
int val;
};
这个是定义值型类.
复制构造函数 初始化 ptr : ptr(new int (*orig.ptr)) ,这里不是很明白.
ptr 是个指针, 而 *orig.ptr 是 HasPtr的对象 orig的 ptr指针所指向的值, 这样初始话编译可以通过.
希望好心人给详细讲解下吧.
[解决办法]
ptr(new int(p)) --> ptr = new int(p); // 动态分配一个int类型并初始化为p,再把指针赋给ptr
ptr(new int(*orig.ptr)) --> ptr = new int(*(orig.ptr)); // 动态分配一个int类型,用orig.ptr指针所指的值来初始化,再把动态分配的指针赋给ptr