2013-10-15 135 views
0

我想知道在哪些情况下应该定义复制构造函数或赋值运算符。从我研究的内容可以看出,无论何时值通过值传递或通过值返回,都需要定义复制构造函数和重载赋值运算符。然而,当用于通过指针或引用(&)通/返回指针或引用,我们需要拷贝构造函数/重载赋值运算符关于复制构造函数和重载赋值运算符

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? 
} 
+2

该代码没有意义。你会得到大量的编译器错误。给出几个问题:1.新样本(15)不能工作。没有适当的构造函数。 2.返回_node。身份不明的标识符_node。 3. getNode();身份不明的函数getNode。等等等等。 – thang

+0

你的例子在技术上具有未定义的行为(除非你修复它与编译器错误一起),但要记住编译器给你的一般工作,如果你做的事情是正确的。 – chris

+3

您应该了解[三位法则](https://en.wikipedia.org/wiki/Rule_of_three_%28C++_programming%29) – Nobody

回答

2

定义一个指针或引用的对象不要求使用的任何构造函数。

相关问题