• copy constructor和copy assignment operator的区别


    拷贝构造函数(copy constructor)被用来以一个对象来初始化同类型的另一个对象,拷贝赋值运算符(copy assignment operator)被用来将一个对象中的值拷贝到同类型的另一个对象中:

    class Widget {
    public:
     Widget(); // default constructor
     Widget(const Widget& rhs); // copy constructor
     Widget& operator=(const Widget& rhs); // copy assignment operator
     ...
    };
    Widget w1; // invoke default constructor
    Widget w2(w1); // invoke copy constructor
    w1 = w2; // invoke copy
    // assignment operator

      当你看到什么东西看起来像一个赋值的话,要仔细阅读,因为 "=" 在语法上还可以被用来调用拷贝构造函数:

    Widget w3 = w2; // invoke copy constructor!

      幸运的是,拷贝构造函数很容易从拷贝赋值中区别出来。如果一个新的对象被定义(就象上面那行代码中的 w3),一个构造函数必须被调用;它不可能是一个赋值。如果没有新的对象被定义(就象上面那行 "w1 = w2" 代码中),没有构造函数能被调用,所以它就是一个赋值。

      拷贝构造函数是一个特别重要的函数,因为它定义一个对象如何通过传值的方式被传递。例如,考虑这个:

    bool hasAcceptableQuality(Widget w);

    ...
    Widget aWidget;
    if (hasAcceptableQuality(aWidget)) ...

      参数 w 通过传值的方式被传递给 hasAcceptableQuality,所以在上面的调用中,aWidget 被拷贝给 w。拷贝动作通过 Widget 的拷贝构造函数被执行。通过传值方式传递意味着“调用拷贝构造函数”。(无论如何,通过传值方式传递用户定义类型通常是一个不好的想法,传引用给 const 通常是更好的选择。)

      

    文章引用自:http://dev.yesky.com/326/2070326.shtml

    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    An AODV Tutorial
    MFC去掉单文档的"无标题-"的方法
    win32 openss 编译
    ASP.NET实现RENREN SIG计算
    std::string str.c_str() const
    fopen
    curl with ssl support for win32
    VC++ utf8 Unicode GB2312 编码转换
    编码转换
    VirtualBox uuid冲突问题
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834907.html
Copyright © 2020-2023  润新知