C++ 关于复制构造函数和重载赋值运算符
我想知道在什么情况下应该定义复制构造函数或赋值运算符。从我所研究的内容中,我发现无论何时通过值传递值或通过值返回值,都需要定义复制构造函数和重载赋值运算符。然而,当指针或引用用于按指针或引用(&)传递/返回时,我们是否需要复制构造函数/重载赋值运算符C++ 关于复制构造函数和重载赋值运算符,c++,C++,我想知道在什么情况下应该定义复制构造函数或赋值运算符。从我所研究的内容中,我发现无论何时通过值传递值或通过值返回值,都需要定义复制构造函数和重载赋值运算符。然而,当指针或引用用于按指针或引用(&)传递/返回时,我们是否需要复制构造函数/重载赋值运算符 class Sample { public : // Assume a constructor that sets the node member SampleNode * getNode() { return _node;
class Sample
{
public :
// Assume a constructor that sets the node member
SampleNode * getNode()
{
return _node;
}
private:
SampleNode * node;
}
class SampleNode
{
public:
void getValue()
{
return _value;
}
private:
unsigned int value;
}
main()
{
Sample * ptr = new Sample(15);
SampleNode *node = getNode(); // Do we need a copy constructor here?
}
定义指向对象的指针或引用不需要使用任何构造函数。这段代码毫无意义。你会得到大量的编译器错误。给出几个问题:1。新样品(15)不能工作。没有合适的构造函数。2.返回_节点。未识别的标识符\u节点。3.getNode();未识别的函数getNode。等等。从技术上讲,您的示例具有未定义的行为(除非您将其与编译器错误一起修复),但请记住,如果您操作正确,编译器通常会为您提供这些行为。您应该了解在通过值传递时使用的复制构造函数/赋值,而不是通过引用。在这种情况下,你做的一切都是指针。这是一个危险的游戏,但它确实成功地让你避免了担心复制构造函数的问题。很抱歉代码。我刚刚提出了一个示例代码,只是为了说明我的问题。这肯定会导致许多编译器错误@你为什么说这是一个危险的游戏?请让我知道,如果有一个隐藏的角落案件,我需要记住,当编码