operator new 为何不被调用
struct x
{
static char isHeap;
void* operator new ( size_t sz)
{
void* p = new char[sz];
isHeap = 'y ';
return p;
}
};
struct y
{
x data;
};
char x::isHeap = 'n ';
--------------------
y *py = new y();
cout < < "opNew y: " < < py-> data.isHeap < < endl;//n
[解决办法]
struct x
{
static char isHeap;
void* operator new ( size_t sz)
{
void* p = new char[sz];
isHeap = 'y ';
return p;
}
};
struct y
{
struct x * data;
};
char x::isHeap = 'n ';
void main(){
y *py = new y();
py-> data = new x();
cout < < "opNew y: " < < py-> data-> isHeap < < endl;//n
}
[解决办法]
x data 不会调用 new 重载的
-------------------------------
http://ma3310.vicp.net
[解决办法]
自定义的是 x 的new,
不是 y 的new ......
[解决办法]
y *py = new y();
这直接就把一个y对象的内存弄到了不能再调用x类的new函数了.
否则就算给y::data再分配一个内存你也用不了它呀. 按道理在内存中你这个y对象和它的y::data地址是一样的(都在py指向的地方). 那你还要给data再分一个内存这不是乱套了啊
[解决办法]
嗯?htqx (航天奇侠) 也有阴沟翻船的时候嘛。
我在以前在Effective C++时也曾困惑过类似问题。
[解决办法]
mark
[解决办法]
..
[解决办法]
y *py = new y();
========
y的new,对于x的对象的构造是在y的new申请的内存上,通过缺省构造函数构造的
htqx兄,可以这么看,你的x的构造函数执行new的动作,x的对象在y的new申请的堆上构造,构造函数再申请内存,以构造,这时执行重载的new
[解决办法]
呃,这个More Effective C++ item 27不是早就给出结论了嘛。
[解决办法]
那就要自己造很多轮子了。