首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

new 运算符解决方法

2012-03-25 
new 运算符C/C++ codenew 的三个版本:void* operator new (std::size_t size) throw (std::bad_alloc)voi

new 运算符

C/C++ code
new 的三个版本:void* operator new (std::size_t size) throw (std::bad_alloc);void* operator new (std::size_t size, const std::nothrow_t& nothrow_constant) throw();void* operator new (std::size_t size, void* ptr) throw();1. new是运算符,有三个版本在如此使用: int *p1 = new int( 35);的使用,调用的是哪一个版本,35是一个数字, 3个版本中没有一个版本可以传35进去2. new 是运算符,但是我们在使用的时候,new 一个对象,为什么可以做到 调用构造函数, 采用了什么机制?? 


[解决办法]
这个 35 是初始化的 int 值, 不会传递给 operator new, 传递给 operator new 的是 sizeof(int), 也就是 4.
[解决办法]
探讨
35 猜测就是版本1,

疑问:如果size是 35的话,那么 哪个参数指定保存35这个数字的 内存字节数呢??


字面意思, size是尺寸大小。 应该是4

但是 35又如何进去了??

[解决办法]
探讨

引用:
传递给 operator new 的参数需要在加在 new 和 类型之间, 而不是在类型之后, 类型之后的是该类型的构造函数的参数. 用例子说更明白:

C/C++ code


#include <stdio.h>
#include <new>

void* operator new (std::size_t size, char* msg……

[解决办法]
new运算符有3个动作:operator new申请内存,set_new_handler异常处理,调用构造函数
[解决办法]
LZ可以看看stl的空间配置器的源码,然后你就知道new是怎么运行的了,大致向楼上说的那样,
第一步用alloc申请内存,验证是否成功,不成功用set_new_handler处理异常,然后调用construct()构造对象
[解决办法]
楼主还是找本《effective c++》吧,认真补一下operator new和new operator的区别与联系,以及placement new

热点排行