举个小例子,我正在尝试找出一个变量是否分配在堆上:
struct A
{
bool isOnHeap;
A () {} // not touching isOnHeap
~A () {}
void* operator new (size_t size)
{
A* p = (A*) malloc(size);
p->isOnHeap = true; // setting it to true
return p;
}
void operator delete (void *p) { free(p); }
};
它给出了g++-4.5中的预期结果(对于堆栈对象会有警告)。这样做是否定义不清?
new
—— 那是一种相当高级的功能,使用范围有限。 - Cat Plus Plus*p
还不存在,对于尚不存在的对象,能够进行的操作非常非常有限...... 访问它们的成员几乎肯定不是其中之一。 - Dennis Zickefoose