2015-03-13 93 views
0

我是一种新的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; 

我需要做的是创建另一个指向对象,* Y,将具有相同值作为x,使用复制构造函数。如果它们是对象而不是指针,那么这个拷贝构造函数会起作用。你能告诉我该怎么办吗?谢谢!

+0

语义pedantry:复制构造*按定义*不采取指针。你在说什么更正确地称为转换构造函数。 – 2015-03-13 18:29:43

回答

2

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

如果你真的想这样做,你可以用一个拷贝构造函数正是如此结合new

test *y = new test(*x); 

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

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

和修复默认的构造函数,因此不指向一个字符串(这将无法编译在一个现代的编译器,并会去可怕的错误,如果你曾经尝试添加一个析构函数来解决内存泄漏)。

如果您是C++的新手,那么在面对指针和内存分配失灵之前,使用基本类型和像std::string这样的友好库类型可能会更有趣。

0

简单,只需取消x当您将它传递给构造函数test时。

test* y = new test(*x);