显式调用构造函数及临时对象

来源:互联网 发布:淘宝上付费引流的软件 编辑:程序博客网 时间:2024/05/23 11:20

在读 Google Protocol Buffer 的源码时发现一个段很晦涩的代码(stubs/common.h):

::google::protobuf::internal::LogFinisher() =   \    ::google::protobuf::internal::LogMessage(::google::protobuf::LOGLEVEL_##LEVEL, __FILE__, __LINE__)
LogFinisher 和 LogMessage 都是类名,LogFinisher 重载了 "=" 运算符,也就是说,这里是显式调用构造函数,而且创建的对象都是临时对象,这段代码实际上是把对象当函数用,因为走完这行,对象就销毁了,功能跟函数式类似的,只不过比普通函数多了一些特性,比如自动析构。

下面来看一下临时对象的生命周期:

#include <iostream>using namespace std;class CTest{public:CTest() { cout << "constructor" << endl; }~CTest() { cout << "desctructor" << endl; }};int main(){CTest();cout << "end" << endl;return 0;}
输出结果:

constructordesctructorend
说明走完那一行,对象就销毁了,而不是 main() 函数结束时销毁的。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耳朵里疱疹破了怎么办 吃了变质的米饭怎么办 吃了变质的蛋糕怎么办 吃了变质的饭怎么办 颈椎病犯了头晕恶心怎么办 感冒引起的耳朵疼怎么办 感冒了左耳朵疼怎么办 受风引起的面瘫怎么办 两边的脸不一样大怎么办 脖子扭到怎么办快速好 卡马西平片过量怎么办 天冷眼睛神经跳怎么办 每天失眠怎么办要疯了 老是失眠是怎么办才好 汗毛又多又长怎么办 脸上出油毛孔粗大黑头怎么办 毛长在皮肤里怎么办 腰韧带拉伤怎么办恢复快 脚扭伤伤了韧带怎么办 膝关节韧带拉伤怎么办恢复快 脚踝韧带拉伤怎么办恢复快 脚扭伤一年没好怎么办 脚扭伤半年还疼怎么办 脚崴过有后遗症怎么办 脚扭伤脚面肿了怎么办 腰突然扭了好痛怎么办 腰扭伤了怎么办最有效 腰扭伤了不能动怎么办 前交叉韧带增粗怎么办 膝盖前交叉韧带损伤怎么办 狗的腿肌肉拉伤怎么办 胳膊上的筋拉伤怎么办 肩周炎胳膊抬不起来怎么办 脖子上的筋拉伤怎么办 脚踝骨扭伤肿了怎么办 脚扭伤肿起来了怎么办 月经量特别少该怎么办 月经血沾床单上怎么办 月经弄到棉被上怎么办 血弄床单上干了怎么办 不小心吃了指甲怎么办