【发布时间】:2011-01-16 11:39:46
【问题描述】:
This page(来自 C++ in action book)显示代码:
class Link
{
friend class FreeList;
public:
Link (Link * pNext, int id)
: _pNext (pNext), _id (id) {}
Link * Next () const { return _pNext; }
int Id () const { return _id; }
// allocator
void * operator new (size_t size)
{
assert (size == sizeof (Link));
return _freeList.NewLink ();
}
void operator delete (void * mem)
{
if (mem)
_freeList.Recycle (mem);
}
static void Purge () { _freeList.Purge (); }
private:
static FreeList _freeList;
Link * _pNext;
int _id;
};
然后说
类链接有一个静态成员 _freeList 由重载的类特定运算符使用 新建和删除。注意断言 在运营商新。它保护我们免受 有人称这个特别 不同类的运算符。如何 那会发生吗? 新运营商和 删除是继承的。如果一个班级 派生自 Link 没有覆盖 这些运营商,新呼吁 派生类将返回一个对象 大小错误(基类大小)。
这是真的吗?我认为 new 将以正确大小的派生对象调用。为什么不呢?
【问题讨论】:
标签: c++ inheritance memory-management