new int 与 new int()

zhaoomeng 2013-07-05 05:25:19
#include "stdafx.h"
#include<iostream>
#include<string>

using namespace::std;

int _tmain(int argc, _TCHAR* argv[])
{
int *p=new int;
cout<<*p<<endl;
int *q=new int();
cout<<*q<<endl;

system("pause");
return 0;
}

今天学习C++的时候突然想到一个问题,new int和new int()二者之间的区别在哪里,在VS中调试后发现二者的结果是不同的,前者指向的值为-842150451,后者指向0。
为什么会出现这种状况呢?
...全文
351 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bengal1124 2013-07-06
  • 打赏
  • 举报
回复
引用 1 楼 zhoujielunzhimi 的回复:
class A; A* a = new A; 不调用构造函数 A* a = new A(); 调用了构造函数 依稀记得不知道在哪儿看到这种说法
都会调用构造函数的哈
unituniverse2 2013-07-06
  • 打赏
  • 举报
回复
补充一下,内置类型(比如你提到的int),编译器假定它含有默认、拷贝和类型转换3种构造函数。而你不写初始化形式时,编译器假定没有构造函数。这一点通用的。不光用于new。 struct TAG1 { int i; }; TAG o1; 此时o1.i将没有被初始化,会有个随机的值(往往所用内存的以前存在的垃圾数据、或者调试版编译器给填入的值)。 struct TAG1 { int i; TAG1(){}; }; TAG o1; 情况同上。 struct TAG1 { int i; TAG1(): i(){}; }; TAG o1; 此时o1.i将为0而不再是个随机的值。
unituniverse2 2013-07-06
  • 打赏
  • 举报
回复
不用括号表示 如果有构造函数则调用默认构造函数,否则直接生成类型对应的内存。 用了括号的想必你如果明白了开头一条自然也不用多解释了。。 举个例子: new TAG; 这个代码,分别按几种情况来说明: 如果是struct TAG { int m; };时,直接生成TAG所占用的内存..因为TAG没有构造函数; 如果是 struct TAG { TAG(); }; 时,调用TAG(); 如果是 struct TAG { TAG(int a);//随便某个构造函数,但是不是默认的那种形式。当然还可以包含不止一个构造函数 }; 时,也是调用TAG();可是此时因为TAG中找不到默认构造函数,所以编译通不过(所以是“如果有 构造函数 则调用 默认构造函数”,换句话说有构造函数时,只有那些构造函数中包含了默认形式的重载的时候,无参形式的new才可能成功通过编译)。
mujiok2003 2013-07-05
  • 打赏
  • 举报
回复
new int(); 比 new int;多了“零初始化”。
qzf362269994 2013-07-05
  • 打赏
  • 举报
回复
new int无参构造 new int()有参构造,默认传入0
Cynhard 2013-07-05
  • 打赏
  • 举报
回复
有括号的进行了初始化,如果是内置类型则为0,bool为false,如果是类则调用默认构造函数。
iamnobody 2013-07-05
  • 打赏
  • 举报
回复
如果你手上的教材不是垃圾教材的话. 在初始化那一章可以找到答案.
sumos 2013-07-05
  • 打赏
  • 举报
回复
class A; A* a = new A; 不调用构造函数 A* a = new A(); 调用了构造函数 依稀记得不知道在哪儿看到这种说法

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧