为何没有构造两次?
#include <stdio.h>
class base {
public:
explicit base() {
printf("base constructor \n");
}
~base() {
printf("base destructor \n");
}
void test() {
printf("do test() \n");
}
base(const base& rh) {
printf("int copy constructor \n");
}
base& operator =(const base& rh) {
printf("in assign \n");
return *this;
}
};
base test0()
{
base a;
return a;
}
base& test1() {
base a;
return a;
}
int main() {
base a = test0();//本以为,这会有两次的构造与析构。
a.test();
printf("will be exit \n");
return 0;
}
编译:g++ test.cpp -g
执行:./a.out
输出:
base constructor
do test()
will be exit
base destructor
/************* 环境信息 ******************/
gcc:gcc version 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC)
os: centos 6.0 内核:2.6.32-71.el6.i686
/***************************************/
今天写了一个小的测试的程序,用来玩的。
我本以为,test0,这个函数执行的时候,会有两次的构造与析构的操作。可是实际上,却只有一次。
于是,我写了test1()这个函数,这个函数,到是执行了两次构造与析构。(当然,写法是不合法的,只是用来测试用滴)
于是,看c++ Primer,只说是临时对象,但是,那也应该是两次呀。或者,猜测g++做了什么优化吗?
求解!!
因为,平时写的时候,这种情况,一般都是直接用指针的,new后,外面主动释放。
相关推荐
Spring Bean重复执行两次(实例被构造两次)问题分析
NULL 博文链接:https://bijian1013.iteye.com/blog/2384411
没有可用的复制构造函数或复制构造函数声明
map使用std::map<int, CArray > 错误, 解决: 重写CArray, 重载构造函数并加const 添加操作 operator =
c++ 子类构造函数初始化及父类构造初始化的使用
主要介绍了c++ 子类构造函数初始化及父类构造初始化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
MMM-Launch:有没有想过人类多久将东西发射到太空? 一年一次? 两次? 错误的! 以一天为周期。 经常,一天几次! 不相信? 我也不
MMM-发射 有没有想过人类多久将东西发射到太空? 一年一次? 两次? 错误的! 以一天为周期。 经常,一天几次! 不相信? 我也不。 这个怎么运作 每 30 秒,MMM-Launch 会告诉您即将到来的日期、发射地点、航天器、发射者、任务、负责每次发射的机构、航天器的图片以及每个任务的完整描述。 例子 图片没有完整描述。 配置选项。 , , , , 包含带注释的 .css 文件,用于对齐和着色文本和图像大小。 安装 git clone https://github.com/mykle1/MMM-Launch进入~/MagicMirror/modules目录。 无需 API 密钥! 无需依赖人! 不开玩笑! Config.js 入口和选项 { module: 'MMM-Launch', position: 'top_left', //
C++编程小心指针被delete两次
主要介绍了C++编程指针被delete两次的严重后果,以实例阐述了C++指针使用中的误区和注意点,需要的朋友可以参考下


