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。等等。从技术上讲,您的示例具有未定义的行为(除非您将其与编译器错误一起修复),但请记住,如果您操作正确,编译器通常会为您提供这些行为。您应该了解在通过值传递时使用的复制构造函数/赋值,而不是通过引用。在这种情况下,你做的一切都是指针。这是一个危险的游戏,但它确实成功地让你避免了担心复制构造函数的问题。很抱歉代码。我刚刚提出了一个示例代码,只是为了说明我的问题。这肯定会导致许多编译器错误@你为什么说这是一个危险的游戏?请让我知道,如果有一个隐藏的角落案件,我需要记住,当编码