美文网首页程序员
[C++进阶]了解C++默默编写并调用哪些函数

[C++进阶]了解C++默默编写并调用哪些函数

作者: 小鱼号的代码日记 | 来源:发表于2020-05-05 22:48 被阅读0次

C++编译器默默生成的函数(public且inline)(如果自己没声明):

Copy构造函数

Copy assignment操作符

析构函数

Default构造函数

详解:

编译器产出的析构函数的虚属性主要来自base class

编译器产出的copy构造函数和copy assignment操作符只是单纯地将来源对象的每一个n on-static成员变量拷贝到目标对象。(浅拷贝)

/***************************
effectivre c++
改善程序与设计的55个具体做法
条款5:了解C++默默编写并调用哪些函数
 ---------小鱼号的代码日记--------------
****************************/
/**************************
 C++编译器默默生成的函数(public且inline)(如果自己没声明):

   Copy构造函数
   Copy assignment操作符
   析构函数
   Default构造函数

编译器产出的析构函数的虚属性主要来自base class
编译器产出的copy构造函数和copy assignment操作符只是单纯地将来源对象的每一个n on-static成员变量拷贝到目标对象。(浅拷贝)
***************************/
#include<iostream>
using namespace std;
class Empty{};
template<typename T>
class NamedObjects{
public:
    NamedObjects(const char* name,const T& value)
    {

    }
    NamedObjects(const std::string& name,const T& value)
    {

    }
    //由于其中声明了一个构造函数,编译器于是不再为它创建default构造函数。
private:
    std::string nameValue;
    T objectValue;
};
template<typename T>
class NamedObjectsPlus{
public:
    //以下构造函数如今不再接受一个const名称,因为nameValue
    //如今是个reference-to-non-const string
    NamedObjectsPlus(std::string& name,const T& value):
        nameValue(name),
        objectValue(value)
    {
    }
private:
    std::string& nameValue; //如今是个reference
    const T objectValue;    //如今是个const
};

int main()
{
   Empty e1;      //default构造函数
                  //析构函数
   Empty e2(e1);  //copy构造函数
   e2 = e1;       //copy assignment操作符

   std::string str = "smallest prime number";
   NamedObjects<int> no1(str,2);
   NamedObjects<int> no2(no1);//调用copy构造函数

   std::string newDog("persephone");
   std::string oldDog("satch");
   const int newY = 2;
   const int oldY = 5;
   NamedObjectsPlus<int> p(newDog,newY);//我们的狗 两岁了
   NamedObjectsPlus<int> s(oldDog,oldY);//我们的狗 岁数很大的狗
   //p = s;//??????
   return 0;
}



内容选自:
effectivre c++
改善程序与设计的55个具体做法

相关文章

网友评论

    本文标题:[C++进阶]了解C++默默编写并调用哪些函数

    本文链接:https://www.haomeiwen.com/subject/cokbghtx.html