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

operator new 为何不被调用,该如何处理

2012-02-14 
operator new 为何不被调用structx{staticcharisHeapvoid*operatornew(size_tsz){void*pnewchar[sz]isH

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不是早就给出结论了嘛。
[解决办法]
那就要自己造很多轮子了。

热点排行