ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

VS2019 对类类型的匿名对象的优化

2022-02-28 23:33:13  阅读:248  来源: 互联网

标签:std Count const cout VS2019 namespace 匿名 对类


#include <iostream>
using namespace std;

class Count {
public:
    Count(const int p) {
        this->p = p;
        std::cout << "第" << ++count_gou << "次" << "构造\n";
    }
    Count(const Count& ex) {
        p = ex.p;
        std::cout << "第" << ++count_copy << "次" << "拷贝构造\n";
    }
    Count& operator=(Count& ex) {
        std::cout << "第" << ++count_deng << "次" << "重载=号\n";
        return *this;
    }

    ~Count() {
        std::cout << "第" << ++count_xi << "次" << "析构函数\n";
    }

    void print() {
        std::cout << "p = " << p << "\n";
    }

public:
    int p;
    static int count_gou;
    static int count_copy;
    static int count_xi;
    static int count_deng;
};

int Count::count_gou = 0;
int Count::count_copy = 0;
int Count::count_xi = 0;
int Count::count_deng=0;


Count test01() {
    Count p1(11);
    std::cout << "最是人间留不住\n";
    return Count(13);
    //返回匿名对象
    //有人接:匿名变有名
    //无人接:析构
}

Count&& test02() {
    std::cout << "不拘一格降人才\n";
    return Count(12);
    //返回匿名对象实体
    //有人接:首先调用析构将匿名对象析构,然后调用拷贝构造
    //无人接:释放
}
Count test03() {
    Count p1(11);
    std::cout << "直挂云帆济沧海\n";
    return p1;
    //返回p1,先调用拷贝构造,生成匿名对象,析构p1,返回匿名对象
    //有人接:匿名对象变有名
    //无人接:析构
}
Count& test04() {
    Count p1(11);
    std::cout << "朱颜辞镜花辞树\n";
    return p1;
    //返回p1实体
    //有人接:首先析构p1,然后调用拷贝构造
    //无人接:析构
}


void Test01() {
    Count p4 =test01();
    test01();
    Count p5=test02();
    test02();
    Count p6 = test03();
    test03();
    Count p7 = test04();
    test04();
}


void Ttest01() {

    throw Count(110);
    //throw抛出匿名对象实际上被认为和实体一样
    //注意如果有人接,其会先被拷贝,再被析构
    //这点与return 返回的实体不太一致。

}

void Ttest02() throw(Count) {
    
    Count p1(11);
    throw  p1;
}

void TTest01() {
    try {
        Ttest01();
    }
    catch (Count e) {
        e.print();
    }
}



void TTest02() {
    try {
        Ttest01();
    }
    catch (Count e) {
        e.print();
    }
}
int main() {
    
   //TTest01();
   TTest02();
   return 0;

}

标签:std,Count,const,cout,VS2019,namespace,匿名,对类
来源: https://www.cnblogs.com/fly777/p/15948171.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有