复制指向对象的构造函数

时间:2015-03-13 18:12:20

标签: c++ pointers constructor copy

我是C ++类的新手,我需要创建一个使用指向对象的指针的复制构造函数。 我的班级看起来像这样:

class test
{
    int a;
    char *b;
public:
    test()
    {
        a=0;
        b="\0";
    }
    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;

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

2 个答案:

答案 0 :(得分:2)

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

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

test *y = new test(*x);

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

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

并修复默认构造函数,使其不指向字符串文字(在现代编译器上无法编译,如果您尝试添加析构函数来修复内存泄漏,则会出现严重错误)。 / p>

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

答案 1 :(得分:0)

简单,只需将x解除引用,然后将其传递给test的构造函数。

test* y = new test(*x);