我是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具有相同的值。如果它们是对象而不是指针,那么复制构造函数就可以了。你能告诉我应该做什么吗?谢谢!
答案 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);