c**a 发帖数: 316 | 1 【 以下文字转载自 Quant 讨论区 】
发信人: ccca (cc), 信区: Quant
标 题: 请教 C++的一个困惑 (operator delete)
发信站: BBS 未名空间站 (Fri Mar 21 20:59:41 2008), 转信
请看如下代码, 其结果是输出 4, 既调用了 A的operator delete(...)
由于 C++ 只能用 reference 和 pointer 实现 polymorphism.
但是如果 用pointer的话, 却无法调用正确的delete 释放内存。
个人认为问题很严重!(operator delete无法声明为 virtual)。
请牛人指点。
class A
{
public:
void operator delete(void* p, size_t size){cout << size;};
private:
int k;
};
class B:public A
{
public:
void operator delete(void* p, size | z******i 发帖数: 59 | 2 You don't define "delete" operator be virtual. You make destructor virtual.
See below.
#include
#include
using namespace std;
class A
{
public:
virtual ~A()
{
cout << "I am A\n";
}
//void operator delete(void* p, size_t size){cout << size << endl;};
private:
int k;
};
class B:public A
{
public:
virtual ~B()
{
cout << "I am B\n";
}
//void operator delete(void* p, size_t size){cout << size<
【在 c**a 的大作中提到】 : 【 以下文字转载自 Quant 讨论区 】 : 发信人: ccca (cc), 信区: Quant : 标 题: 请教 C++的一个困惑 (operator delete) : 发信站: BBS 未名空间站 (Fri Mar 21 20:59:41 2008), 转信 : 请看如下代码, 其结果是输出 4, 既调用了 A的operator delete(...) : 由于 C++ 只能用 reference 和 pointer 实现 polymorphism. : 但是如果 用pointer的话, 却无法调用正确的delete 释放内存。 : 个人认为问题很严重!(operator delete无法声明为 virtual)。 : 请牛人指点。 : class A
|
|