j*****y 发帖数: 1071 | 1 这是 c++ header file new 里面的原型
void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void*) throw();
void operator delete[](void*) throw();
void* operator new(std::size_t, const std::nothrow_t&) throw();
void* operator new[](std::size_t, const std::nothrow_t&) throw();
void operator delete(void*, const std::nothrow_t&) throw();
void operator delete[](void*, const std::nothrow_t&) throw();
也就是说 new 后面跟的是一个 size 的参数
可是平时用都是这么用的
A * p = new A;
这里 new 后面是一个类型,难道哪里把这个类型转化成了一个 size吗? |
b*********h 发帖数: 103 | 2 是转成了 operator new (sizeof(T))
程序员可以自己 new 一个...哈哈 |
j*****y 发帖数: 1071 | 3 看来 new 的 return 也是没有 type的, 也是 void * 的
但是这么调用 new (23) 也不对阿
如何用 size 做为 参数来调用 new 呢?
【在 b*********h 的大作中提到】 : 是转成了 operator new (sizeof(T)) : 程序员可以自己 new 一个...哈哈
|
b*********h 发帖数: 103 | 4 T* a = (T*) operator new (size); |
j*****y 发帖数: 1071 | 5 看来我门常用的 new是系统自己搞了一个 macro ?
【在 b*********h 的大作中提到】 : T* a = (T*) operator new (size);
|
b*********h 发帖数: 103 | 6 上面列的是 operator new 的,它和 new 是不一样的
当使用 new 时,首先调用 operator new 分配空间,然后再初始化或调用构造函数
对于一个基本类型,下面是一样的
T* a = new T;
T* a = (int*) operator new (sizeof(T));
但是 T 是一个 class 就不一样了,第一个还会调用构造函数,第二个不会 |
j*****y 发帖数: 1071 | 7 多谢 :)
【在 b*********h 的大作中提到】 : 上面列的是 operator new 的,它和 new 是不一样的 : 当使用 new 时,首先调用 operator new 分配空间,然后再初始化或调用构造函数 : 对于一个基本类型,下面是一样的 : T* a = new T; : T* a = (int*) operator new (sizeof(T)); : 但是 T 是一个 class 就不一样了,第一个还会调用构造函数,第二个不会
|
j*****y 发帖数: 1071 | 8 有个问题,一般讲重载 是重载 new 还是 重载 operator new 阿?
【在 b*********h 的大作中提到】 : 上面列的是 operator new 的,它和 new 是不一样的 : 当使用 new 时,首先调用 operator new 分配空间,然后再初始化或调用构造函数 : 对于一个基本类型,下面是一样的 : T* a = new T; : T* a = (int*) operator new (sizeof(T)); : 但是 T 是一个 class 就不一样了,第一个还会调用构造函数,第二个不会
|
b*********h 发帖数: 103 | |
h*******s 发帖数: 8454 | 10 印象中effective 西加加还是more effective里面讲过这个
operator new is not new operator
【在 j*****y 的大作中提到】 : 看来我门常用的 new是系统自己搞了一个 macro ?
|