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

Copy constructor for pointers to object

本文关键字:指针 构造函数 对象 复制      更新时间:2023-10-16

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

class test
{
    int a;
    char *b;
public:
    test()
    {
        a=0;
        b="";
    }
    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 的构造函数时取消引用即可。

test* y = new test(*x);