Java可以直接调用同名构造函数,仅仅起初始化的功能,并不构造新的对象,但是C++里面没有。看一下这段代码:

class A {
public:
A() { printf("A() \n"); }
A(int d) { printf("A(int) \n"); A(); }  // 不能这样调用构造函数!会生成另一个匿名对象
~A() { printf(" ~A \n"); }
void ddd() { printf(" ddd \n"); }
}; int main(int argc, char* argv[])
{
A aaa();
aaa.ddd(); getchar();
return ;
}

输出结果是:
A(int)
A()
~A
ddd

但是如果改成
A(int d) { printf("A(int) \n"); }
输出结果是:
A(int)
ddd

充分证明这中间有生成和销毁过一个匿名对象!并且我目前不知道有没有官方解决方案,如果要定义init()函数,那还是算了吧。

参考:
http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html

一些讨论:

http://bbs.csdn.net/topics/80415554

---------------------------------------------------------------------

但是可以显式调用析构函数,参考:

http://fpcfjf.blog.163.com/blog/static/55469793201362442256498/

C++不能显式调用构造函数,会生成匿名对象,这点与Java完全不一样!的更多相关文章

  1. C++构造函数详解及显式调用构造函数

    来源:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html       c++类的构造函数详解                  ...

  2. C++中构造函数详解及显式调用构造函数

    C++构造函数详解及显式调用构造函数                                         c++类的构造函数详解                        一. 构造函 ...

  3. 定位new表达式与显式调用析构函数

    C++的核心理念之一是RAII,Resource Acquisition Is Initialization,资源获取即初始化.资源有很多种,内存.互斥锁.文件.套接字等:RAII可以用来实现一种与作 ...

  4. linux下动态链接库(.so)的显式调用和隐式调用

    进入主题前,先看看两点预备知识. 一.显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要 ...

  5. C++如何显式调用常成员函数

    C++的常成员函数与同名成员函数重载时,该如何显式调用常成员函数? 具体的一个小例子: #include <iostream> using namespace std; class C1 ...

  6. 循环引擎 greenlet 没有显式调度的微线程,换言之 协程

    小结: 1. micro-thread with no implicit scheduling; coroutines, in other words. 没有显式调度的微线程,换言之 协程 2. 一个 ...

  7. based on Greenlets (via Eventlet and Gevent) fork 孙子worker 比较 gevent不是异步 协程原理 占位符 placeholder (Future, Promise, Deferred) 循环引擎 greenlet 没有显式调度的微线程,换言之 协程

    gevent GitHub - gevent/gevent: Coroutine-based concurrency library for Python https://github.com/gev ...

  8. 只能在堆上生成的对象 VS. 只能在栈上生成的对象

    1. 只能在堆上 即禁止在栈上生成.如何实现? 当对象建立在栈上面时,是由编译器分配内存空间的,调用构造函数来构造栈对象.如果类的析构函数是私有的,则编译器不会在栈空间上为类对象分配内存. 所以,只需 ...

  9. c++构造函数中调用构造函数---匿名对象再探

    #include<iostream> #include<string> using namespace std; class Copy_construction { publi ...

随机推荐

  1. DNS劫持(网页打不开的解决方法)

    我们上网,必不可少的就是DNS,在这里先介绍下DNS的相关知识. DNS 是域名系统 (Domain NameSystem) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主 ...

  2. Linux 系统Telnet服务

    Linux 系统Telnet服务 telnet与ssh相比,安全性能并不高,但是在ssh版本升级或者其他的情况下还是需要开启这一项服务.linux提供服务是由运行在后台的守护进程daemon来执行的, ...

  3. 模仿cocos2dx 风格用工厂方法,实现class A,不使用宏,

    class A { static A *create(); bool init(); }; A* A::create() { A *pRet=new A; if(pRet && pRe ...

  4. 基于OpenMP的矩阵乘法实现及效率提升分析

    一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <i ...

  5. 1.项目开发-->Memcached之ASP.NET实现

    1.Memcached安装 第一步:下载windows稳定版Memcached 1.2.1 win32,解压后,将memcached.exe文件放到自己想存放的盘符内,例如C:\Windows\Sys ...

  6. mongoDB 入门指南、示例

    一.准备工作 1. 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.org/displ ...

  7. JS--事件对象中部份浏览器不兼容方法

    测试时主要用的浏览器是Firefox 28.0.IE11.IE8.Chrome 34.0  一.什么是事件对象:当触发某个事件的时候,会产生一个事件对象,这个对象包含着所有的与事件有关的信息,包括导致 ...

  8. 【BZOJ】【3164】【HEOI2013】Eden的博弈问题

    树形DP 这题在考场上直接写的TreeDP……当时也没想出一个像样的暴力来对拍……好像只能这么直接做了……? 都说是博弈树了,转移关系都给的这么直接了……也没啥难度了吧= =(怪不得大家都不愿意写题解 ...

  9. 【BZOJ】【1046】【HAOI2007】上升序列

    DP+贪心 啊……其实是个水题,想的复杂了 令f[i]表示以 i 为起始位置的最长上升子序列的长度,那么对于一个询问x,我们可以贪心地从前往后扫,如果f[i]>=x && a[i ...

  10. 12 高性能I/O框架库Libevent

    这里不讲Libevent库的具体内容了,从宏观上对I/O库整体做个介绍 Linux服务器程序必须处理三类事件:I/O事件,信号和定时事件 统一事件源:统一处理这三类事件既能使代码简单易懂,又能避免一些 ...