c++中new用法
c++new后面接什么我怎么看有的接的是构造函数有的时候接的是类CBitmap*bmp=newCBitmap;还是CBitmap*bmp=newCBitmap();...
c++
new后面接什么
我怎么看有的接的是构造函数有的时候接的是类
CBitmap* bmp=new CBitmap;
还是CBitmap* bmp=new CBitmap(); 展开
new后面接什么
我怎么看有的接的是构造函数有的时候接的是类
CBitmap* bmp=new CBitmap;
还是CBitmap* bmp=new CBitmap(); 展开
5个回答
展开全部
new有三种使用方式:plain new,nothrow new和placement new。
(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的:
void* operator
new(std::size_t) throw(std::bad_alloc);
void operator delete(void *)
throw();
提示:plain
new在分配失败的情况下,抛出异常std::bad_alloc而不是返回NULL,因此通过判断返回值是否为NULL是徒劳的。
(2)nothrow new是不抛出异常的运算符new的形式。nothrow
new在失败时,返回NULL。定义如下:
void * operator new(std::size_t,const
std::nothrow_t&) throw();
void operator delete(void*) throw();
(3)placement
new意即“放置”,这种new允许在一块已经分配成功的内存上重新构造对象或对象数组。placement
new不用担心内存分配失败,因为它根本不分配内存,它做的唯一一件事情就是调用对象的构造函数。定义如下:
void* operator
new(size_t,void*);
void operator
delete(void*,void*);
提示1:palcement
new的主要用途就是反复使用一块较大的动态分配的内存来构造不同类型的对象或者他们的数组。
提示2:placement
new构造起来的对象或其数组,要显示的调用他们的析构函数来销毁,千万不要使用delete。
char* p = new(nothrow)
char[100];
long *q1 = new(p) long(100);
int *q2 = new(p)
int[100/sizeof(int)];
(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的:
void* operator
new(std::size_t) throw(std::bad_alloc);
void operator delete(void *)
throw();
提示:plain
new在分配失败的情况下,抛出异常std::bad_alloc而不是返回NULL,因此通过判断返回值是否为NULL是徒劳的。
(2)nothrow new是不抛出异常的运算符new的形式。nothrow
new在失败时,返回NULL。定义如下:
void * operator new(std::size_t,const
std::nothrow_t&) throw();
void operator delete(void*) throw();
(3)placement
new意即“放置”,这种new允许在一块已经分配成功的内存上重新构造对象或对象数组。placement
new不用担心内存分配失败,因为它根本不分配内存,它做的唯一一件事情就是调用对象的构造函数。定义如下:
void* operator
new(size_t,void*);
void operator
delete(void*,void*);
提示1:palcement
new的主要用途就是反复使用一块较大的动态分配的内存来构造不同类型的对象或者他们的数组。
提示2:placement
new构造起来的对象或其数组,要显示的调用他们的析构函数来销毁,千万不要使用delete。
char* p = new(nothrow)
char[100];
long *q1 = new(p) long(100);
int *q2 = new(p)
int[100/sizeof(int)];
展开全部
一样的。接类名,等于用默认构造函数,一种简写。
因为构造函数很可能不只一个,如果要使用非默认构造函数,那么就要自己明确指定。
因为构造函数很可能不只一个,如果要使用非默认构造函数,那么就要自己明确指定。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你首先要知道new是干什么的,它是用来分配内存空间的,它根据后面的描述自动计算分配空间,并返回该空间地址(指针),举个例子,就好比你申请建一个(平房)房子,你就要“new 平房”
然后,系统会告诉你房子的地址(指针),你就可以去住了,明白了吗
然后,系统会告诉你房子的地址(指针),你就可以去住了,明白了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通常new其实做了二件事情
1.分配内存
2.调用构造函数
楼主的写法没问题,如果楼主想要有更进一步的了解,多google下
例如:http://tech.e800.com.cn/articles/2010/415/1271300717730_1.html
1.分配内存
2.调用构造函数
楼主的写法没问题,如果楼主想要有更进一步的了解,多google下
例如:http://tech.e800.com.cn/articles/2010/415/1271300717730_1.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类型名和构造函数都可以,如果是类型名,则会调用该类型的默认构造函数来初始化一个类对象,而如果是构造函数,那就会创建一个对象,该对象是用构造函数里面的值来初始化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询