void * operator new(size_t size) // operator new还可能有其它参数
{
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
while (1) {
分配size字节内存;
if (分配成功)
return (指向内存的指针);
// 分配不成功,找出当前出错处理函数
new_handler globalhandler = set_new_handler(0);
set_new_handler(globalhandler);
if (globalhandler) (*globalhandler)();
else throw std::bad_alloc();
}
}
若是此类名为student;那么动态分配的正确语法是:student *ptr = new student;么?这样使用,operator new函数中的形参size的值从哪来?size的值是字节数,还是生成对象的个数?分配0字节的动态分配方法又如何使用,是student *ptr = new student[0]么?请依次解答。谢谢
10 个解决方案
#1
这个size是编译器根据申请对象的类型计算的 就是分配内存的大小 不是要你填的
分配0字节??可能么 有意义么
分配0字节??可能么 有意义么
#2
在书里提到分配0字节的operator new的处理情况。我也不知道这样的使用有什么意义,所以才问。
#3
你误解意思了 0字节是错误的参数
所以才有
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
这么个处理
所以才有
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
这么个处理
#4
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
这个是必须的, 即使是空类也要有1字节的空间
size = 1; // 把它当作1个字节请求来处理
}
这个是必须的, 即使是空类也要有1字节的空间
#5
LZ,,
我想请问一下:
student *ptr = new student。。
这个new 与operator new 一样吗???LZ没有细看书吧???
我想请问一下:
student *ptr = new student。。
这个new 与operator new 一样吗???LZ没有细看书吧???
#6
student *ptr = new student。。
申请内存,,但这里的new不是重载的new,,,,这里内存分配的大小是根据student的大小来的,
还要加上一些系统内部的处理数据,也就是delete释放时所需要的数据。。。
而operator new 是重载new 函数,,分配的空间比上面的new 要小,因而在一定程度上可以
提高程序的性能。。。这里的大小是要函数调用时自己提供的。。。
如:
void * p;
p = operator new(sizeof(int));
申请内存,,但这里的new不是重载的new,,,,这里内存分配的大小是根据student的大小来的,
还要加上一些系统内部的处理数据,也就是delete释放时所需要的数据。。。
而operator new 是重载new 函数,,分配的空间比上面的new 要小,因而在一定程度上可以
提高程序的性能。。。这里的大小是要函数调用时自己提供的。。。
如:
void * p;
p = operator new(sizeof(int));
#7
分配0字节的动态分配方法又如何使用,是student *ptr = new student[0]么?
正常情况下不可能分配0空间的,,如果size=0的话,也要分配一个字节的空间。。。
至于:student *ptr = new student[0];;这句话是什么意思???有这样的语句???
如果解答不对,请高手指正
正常情况下不可能分配0空间的,,如果size=0的话,也要分配一个字节的空间。。。
至于:student *ptr = new student[0];;这句话是什么意思???有这样的语句???
如果解答不对,请高手指正
#8
class x {
public:
void f();
static void * operator new(size_t size, new_handler p);
static void * operator new(size_t size)
{ return ::operator new(size); }
};
x *px1 =
new (specialerrorhandler) x; // 调用 x::operator
// new(size_t, new_handler)
x* px2 = new x; // 调用 x::operator
// new(size_t)
#9
size应该为默认的类的大小
#10
使用new时调用的是operator new,应该没错吧?使用operator new就一地你的要用operator new()的形式么?那样我还要问你么
#1
这个size是编译器根据申请对象的类型计算的 就是分配内存的大小 不是要你填的
分配0字节??可能么 有意义么
分配0字节??可能么 有意义么
#2
在书里提到分配0字节的operator new的处理情况。我也不知道这样的使用有什么意义,所以才问。
#3
你误解意思了 0字节是错误的参数
所以才有
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
这么个处理
所以才有
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
这么个处理
#4
if (size == 0) { // 处理0字节请求时,
size = 1; // 把它当作1个字节请求来处理
}
这个是必须的, 即使是空类也要有1字节的空间
size = 1; // 把它当作1个字节请求来处理
}
这个是必须的, 即使是空类也要有1字节的空间
#5
LZ,,
我想请问一下:
student *ptr = new student。。
这个new 与operator new 一样吗???LZ没有细看书吧???
我想请问一下:
student *ptr = new student。。
这个new 与operator new 一样吗???LZ没有细看书吧???
#6
student *ptr = new student。。
申请内存,,但这里的new不是重载的new,,,,这里内存分配的大小是根据student的大小来的,
还要加上一些系统内部的处理数据,也就是delete释放时所需要的数据。。。
而operator new 是重载new 函数,,分配的空间比上面的new 要小,因而在一定程度上可以
提高程序的性能。。。这里的大小是要函数调用时自己提供的。。。
如:
void * p;
p = operator new(sizeof(int));
申请内存,,但这里的new不是重载的new,,,,这里内存分配的大小是根据student的大小来的,
还要加上一些系统内部的处理数据,也就是delete释放时所需要的数据。。。
而operator new 是重载new 函数,,分配的空间比上面的new 要小,因而在一定程度上可以
提高程序的性能。。。这里的大小是要函数调用时自己提供的。。。
如:
void * p;
p = operator new(sizeof(int));
#7
分配0字节的动态分配方法又如何使用,是student *ptr = new student[0]么?
正常情况下不可能分配0空间的,,如果size=0的话,也要分配一个字节的空间。。。
至于:student *ptr = new student[0];;这句话是什么意思???有这样的语句???
如果解答不对,请高手指正
正常情况下不可能分配0空间的,,如果size=0的话,也要分配一个字节的空间。。。
至于:student *ptr = new student[0];;这句话是什么意思???有这样的语句???
如果解答不对,请高手指正
#8
class x {
public:
void f();
static void * operator new(size_t size, new_handler p);
static void * operator new(size_t size)
{ return ::operator new(size); }
};
x *px1 =
new (specialerrorhandler) x; // 调用 x::operator
// new(size_t, new_handler)
x* px2 = new x; // 调用 x::operator
// new(size_t)
#9
size应该为默认的类的大小
#10
使用new时调用的是operator new,应该没错吧?使用operator new就一地你的要用operator new()的形式么?那样我还要问你么