Chinaunix

标题: 弱弱的问一句:new A() 和new A有没有区别 [打印本页]

作者: cc007cc    时间: 2009-10-08 10:57
标题: 弱弱的问一句:new A() 和new A有没有区别
new A() 和new A有没有区别
个人不知道区别 请教大家
作者: sunyu_bit    时间: 2009-10-08 11:02
标题: 回复 #1 cc007cc 的帖子
一样,都是调用default constructor
作者: cnzhaopeng    时间: 2009-10-08 16:14
标题: 回复 #1 cc007cc 的帖子
对于内置类型和没有默认构造函数的类型,采用不同初始化方式是有很大差别。
int *pi=new int;
int *pi=new int();
前者指向一个未初始化的数。
后者指向一个初始化的0。
作者: qthdn    时间: 2009-10-08 19:55
应该是一个开辟的是对象,一个是函数空间吧
作者: bert1984    时间: 2009-10-08 20:18
原帖由 qthdn 于 2009-10-8 19:55 发表
应该是一个开辟的是对象,一个是函数空间吧

什么叫做函数空间啊?
作者: CGer-Tux    时间: 2009-10-09 15:51
标题: 回复 #5 bert1984 的帖子
在内存中的新的代码段
作者: antigloss    时间: 2009-10-09 17:18
原帖由 cnzhaopeng 于 2009-10-8 16:14 发表
对于内置类型和没有默认构造函数的类型,采用不同初始化方式是有很大差别。
int *pi=new int;
int *pi=new int();
前者指向一个未初始化的数。
后者指向一个初始化的0。

well, i agree with you.
for new int(), the 'int' will be value-initialized
作者: wangxinus    时间: 2009-10-09 20:31
真是活到老,学到老。
作者: @小天@    时间: 2009-10-09 21:09
原帖由 cnzhaopeng 于 2009-10-8 16:14 发表
对于内置类型和没有默认构造函数的类型,采用不同初始化方式是有很大差别。
int *pi=new int;
int *pi=new int();
前者指向一个未初始化的数。
后者指向一个初始化的0。


学习了,还真没有这么用过。
作者: DraculaW    时间: 2009-10-09 22:24
有区别
当你有不同的构造函数时候有区别
譬如你有
class A
{
public:
    A(){}
    A(int i = 0){}
}
就有区别了
作者: fera    时间: 2009-10-10 13:08
原帖由 DraculaW 于 2009-10-9 22:24 发表
有区别
当你有不同的构造函数时候有区别
譬如你有
class A
{
public:
    A(){}
    A(int i = 0){}
}
就有区别了

没错
作者: egmkang    时间: 2009-10-22 18:08
原帖由 DraculaW 于 2009-10-9 22:24 发表
有区别
当你有不同的构造函数时候有区别
譬如你有
class A
{
public:
    A(){}
    A(int i = 0){}
}
就有区别了


你确认你的代码可以通过编译?
我VC 9,失败
作者: cc007cc    时间: 2010-07-21 17:42
有区别
当你有不同的构造函数时候有区别
譬如你有
class A
{
public:
    A(){}
    A(int i = 0){ ...
DraculaW 发表于 2009-10-09 22:24



    大哥 你这个声明对new A  和 new A()都不行啊,都会报:
call of overloaded `A()' is ambiguous
作者: rain_fish    时间: 2010-07-21 21:39
没有区别。。。
作者: tyc611    时间: 2010-07-21 22:22
对于类类型没区别,对于内置类型如3楼所说
作者: DraculaW    时间: 2010-08-31 21:50
大哥 你这个声明对new A  和 new A()都不行啊,都会报:
call of overloaded `A()' is ambiguou ...
cc007cc 发表于 2010-07-21 17:42



   
你确认你的代码可以通过编译?
我VC 9,失败
egmkang 发表于 2009-10-22 18:08


相当确认..

vs2010
g++都可以过去
作者: 日月并行    时间: 2010-08-31 22:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天外飞客    时间: 2010-08-31 22:41
不行的,你定义了类后,定义个对象,再编译。
相当确认..

vs2010
g++都可以过去
DraculaW 发表于 2010-08-31 21:50

作者: ecjtubaowp    时间: 2010-08-31 22:49
想起了java
作者: caboy_cu    时间: 2010-09-01 10:10
有区别
当你有不同的构造函数时候有区别
譬如你有
class A
{
public:
    A(){}
    A(int i = 0){ ...
DraculaW 发表于 2009-10-09 22:24



这样做应该有歧义的,cpp primer上有讲到

因为都可以是默认构造函数
作者: tajial    时间: 2010-09-01 11:07
学习了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2