[转]c++ new带括号和不带括号

ref:http://m.blog.csdn.net/blog/u012745772/42420443

在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?
比如:
CBase *base = new CDerived();
CBase *base = new CDeviced;

很多人都说,加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数。这是有问题的。
对于自定义类类型:
如果该类没有定义构造函数(由编译器合成默认构造函数)也没有虚函数,那么class c = new class;将不调用合成的默认构造函数,而class c = new class();则会调用默认构造函数。申请的空间会初始化为0
如果该类没有定义构造函数(由编译器合成默认构造函数)但有虚函数,那么class c = new class;和class c = new class();一样,都会调用默认构造函数。申请的空间不会初始化为0
如果该类定义了默认构造函数,那么class c = new class;和class c = new class();一样,都会调用默认构造函数。

对于内置类型:
int *a = new int;不会将申请到的int空间初始化,而int *a = new int();则会将申请到的int空间初始化为0。
以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0:
int *p1 = new int[10];
int *p2 = new int[10]();
结论:别使用不带括号的new。
class A{
public:
//A(){a=1;}
public:
int a;
};
A *a1=new A;
A *a2=new A();

cout<<a1->a<<endl; //输出:-842150451
cout<<a2->a<<endl; //输出0
A a3;
cout<<a3.a<<endl; //运行异常,a没有初始化。
如果加上一个virtual,如virtual ~A(){},

cout<<a1->a<<endl; //输出:-842150451
cout<<a2->a<<endl; //输出 -842150451

时间: 2024-12-11 02:44:03

[转]c++ new带括号和不带括号的相关文章

js中new函数后带括号和不带括号的区别

用new创建构造函数的实例时,通常情况下new 的构造函数后面需要带括号(譬如:new Parent()). 有些情况下new的构造函数后带括号和不带括号的情况一致,譬如: function Parent(){this.num = 1;}console.log(new Parent());//输出Parent对象:{num:1}console.log(new Parent);//输出Parent对象:{num:1} 1 1 function Parent(){ 2 2 this.num = 1;

python 类带括号和不带括号的区别

Python创建类的时候,加()和不加有什么区别.联系? Python中函数带括号和不带括号的区别 原文地址:https://www.cnblogs.com/ppybear/p/12348736.html

C++中#include包含头文件带 .h 和不带 .h 的区别

C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些不同? 之前在写C++程序的时候只知道使用 #include <iostream> 的时候,使用函数前要用 using namespace std; 导入命名空间,而 #include <iostream.h> 则不用,这个得看C+ +标准化过程为C++开发者做了哪些有意义的工作. (

python带参数和不带参数装饰器

http://blog.csdn.net/pipisorry/article/details/41902599 对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名: 对于有参数的装饰器在调用时使用的是应用的参数,@timeStumpFunc_args(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数getfunc()来接收要被装饰的函数对象. #!/usr/bin/env python # coding=gbk """ __title

【其他】UTF-8带签名与不带签名

在 Visual Web Developer 另存为文件时,有编码选项,其中有: Unicode (UTF-8 with signature) - Codepage 65001 Unicode (UTF-8 without signature) - Codepage 65001 这两个都是 UTF-8,一个带签名,一个不带签名,有什么区别呢? 带签名也就是带 BOM 信息,不带签名就是不带 BOM. 如果这个网页是用来被别人包含的,如 ASP 中的 include,那么这个网页就不要带签名,否则

5个KO实例带你装B带你飞

Knockoutjs 以下简称 ko, 是一个 javascript 的 MVVM 框架. 在 MVC 4 的项目模板中, 默认会引用 knockoutjs, 我正式接触它也不过4个月的时间. 在没有使用它之前, 要做一个主从关系的维护, 大概要写一堆 CloneNode / Append, js 水平一般的同学, 要写这样一个业务页面, 大概要写几百几千行 js 才行. 本示例不是介绍 ko 的用法, 而是 以 我在项目中 处理过的 稍有些复杂的 业务 为原型, 做深入一步的理解如何用KO带你

带你装逼带你飞之微信群聊匿名消息

带你装逼带你飞之微信群聊匿名消息 记得八月份网上有个IOS版的微信匿名消息插件,可是2天后被封了...废话不说,其实封的是插件,不是原理~ 九月份,UWP 微信出来了(?),然而那个微信有BUG,比如模板消息可以随便转发...(就是类似微信支付消息,登陆通知消息etc…)所以可以利用这一点进行发送装逼消息.(如果还想长时间装逼,那么请关闭自动更新功能) 如果你有公众号那么就发个消息直接转发吧,如果没有的话照下面做... 发消息前的准备:退出UWP微信的登陆并清空所有数据.Windbg调试工具并于

直接插入排序(带哨兵和不带哨兵)

前言 插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止. 直接插入排序 基本思想 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1..i - 1]中,生成含n个记录的有序区. 排序方法 将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i - 1, i - 2,

最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。

最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY. SAP各系统版本安装虚拟机+终身辅导+推荐就业+项目文档+模块PA视频 联系人:tomy(saper) QQ 59728900 MSN或email:  [email protected] http://shop.paipai.com/59728900 制作缘由:   鉴于SAP最新版本EHP7的问世,有的兄弟殷切需要EHP7,因为公司和其他公司有合作,又因有的学CRM的兄弟需要把CRM和ECC装一起.恰好这

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节.交流QQ群:[编程之美 365234583]http://jq.qq.com/?_wv=1027&k=XVfBTo 要捐钱的就打支付宝吧:13958686678(泥瓦匠开个玩笑~) 一.前言 继续AndroidUI系列,泥瓦匠又要开始扯淡了.哈哈今天在文章头加了个支付宝账号.我也真逗,至今没收到一笔是写博客的钱.或是分享的.泥瓦匠也就挂着逗逗乐