复制指向对象指针的构造函数

Copy constructor for pointers to object

我是 C++ classes 的新手,我需要制作一个使用对象指针的复制构造函数。 我的 class 看起来像这样:

class test
{
    int a;
    char *b;
public:
    test()
    {
        a=0;
        b="[=10=]";
    }
    test(const test &p)
    {
        b=new char(strlen(p.b)+1);
        b=p.b;
        a=p.a;
        cout<<"The copy constructor works";
    }
    void seta(int nr)
    {
        a=nr;
    }
    void setb(char *s)
    {
        b=s;
    }
    int geta()
    {
        return a;
    }
    char *getb()
    {
        return b;
    }
};

现在我有一个指向对象的指针

 test *x;
 x=new test;

我需要做的是使用复制构造函数创建另一个指向对象 *y 的指针,它将与 x 具有相同的值。如果它们是对象而不是指针,那么复制构造函数就可以工作。你能告诉我应该怎么做吗?谢谢!

你可能应该做的是不要使用指针。

如果你真的想这样做,你可以将new与一个复制构造函数结合起来:

test *y = new test(*x);

您还需要修复复制构造函数以复制字符串的内容,而不是指针:

strcpy(b, p.b);  // not b = p.b;

并修复默认构造函数,使其不指向字符串文字(这将无法在现代编译器上编译,如果您尝试添加析构函数来修复内存泄漏,将会出现可怕的错误) .

如果您是 C++ 的新手,在面对指针和内存分配的疯狂之前,您可能会使用基本类型和友好的库类型(如 std::string)获得更多乐趣。

很简单,当您将 x 传递给 test 的构造函数时,只需取消引用 x

test* y = new test(*x);