C++ 复制构造函数
在本设计的课堂上:C++ 复制构造函数,c++,C++,在本设计的课堂上: class X { X* left_; X* right_; X(const X&) }; 在尝试实现cpy ctor时,我陷入了循环: X::X(const X& pattern) { if (this != &pattern) { left_ = new X(*pattern.left_);//this is the line } } 为了解决这个问题,我正在考虑使用memcpy+
class X
{
X* left_;
X* right_;
X(const X&)
};
在尝试实现cpy ctor时,我陷入了循环:
X::X(const X& pattern)
{
if (this != &pattern)
{
left_ = new X(*pattern.left_);//this is the line
}
}
为了解决这个问题,我正在考虑使用memcpy+操作符new()fnc,但是有更好的方法吗 您有一个无限大的树,因为它看起来像您的
左
和右
指针总是指向另一个X
?复制这么大的一棵树,你还能指望什么呢
你想有一个停止条件,比如
X::X(const X& pattern)
:left_(0), right_(0)
{
if(pattern.left_)
left_ = new X(*pattern.left_);//this is the line
/* ... */
}
您有一个无限大的树,因为它看起来像您的
左
和右
指针总是指向另一个X
?复制这么大的一棵树,你还能指望什么呢
你想有一个停止条件,比如
X::X(const X& pattern)
:left_(0), right_(0)
{
if(pattern.left_)
left_ = new X(*pattern.left_);//this is the line
/* ... */
}
如果我从你对约翰尼斯答案的评论中正确地理解了你,你只想复制一代孩子?制作另一个构造函数,例如
class X
{
public:
X(const X& other)
:left_(0), right_(0)
{
left_ = new X(*other.left_, 1);
}
X(const X& other, unsigned howDeep)
:left_(0), right_(0)
{
if(howDeep == 0)
return;
left_ = new X(*other.left_, howDeep - 1);
}
private:
X* left_;
X* right_;
};
如果我从你对约翰尼斯答案的评论中正确地理解了你,你只想复制一代孩子?制作另一个构造函数,例如
class X
{
public:
X(const X& other)
:left_(0), right_(0)
{
left_ = new X(*other.left_, 1);
}
X(const X& other, unsigned howDeep)
:left_(0), right_(0)
{
if(howDeep == 0)
return;
left_ = new X(*other.left_, howDeep - 1);
}
private:
X* left_;
X* right_;
};
@约翰:是的,这是一个解决方案,但前提是你想复制所有内容。我(很抱歉没有提到这一点,有点匆忙)只需要复制“旁边的一个”,如果你知道我在做什么的话mean@Andre如果你把这个对象作为一个参数传递给一个ctor,它们不是相等的吗?约翰,你觉得什么没有意义?@Johan是的,这是一个解决方案,但前提是你想复制所有东西。我(很抱歉没有提到这一点,有点匆忙)只需要复制“旁边的一个”,如果你知道我在做什么的话mean@Andre如果你把这个对象作为一个参数传递给一个ctor,它们不是相等的吗?约翰,你有什么不明白的吗?对不起,这个怎么可能相等呢?哎呀,它们是两个不同的物体!为什么不呢?见代码:X;X:X(X)@Ajay:你不能像那样显式地调用构造函数。在复制构造函数中,参数不能是
this
,因为在形成参数时,正在构造的对象不存在。@Ajay:这应该是什么?这不是C++。迈克你说得对,这是不可能的。我犯了个错误。该结构应与赋值运算器一起使用;对不起,这个
怎么能等于模式
?哎呀,它们是两个不同的物体!为什么不呢?见代码:X;X:X(X)@Ajay:你不能像那样显式地调用构造函数。在复制构造函数中,参数不能是this
,因为在形成参数时,正在构造的对象不存在。@Ajay:这应该是什么?这不是C++。迈克你说得对,这是不可能的。我犯了个错误。该结构应与赋值运算器一起使用;哇,带复制构造函数的递归!哇,带复制构造函数的递归!