【发布时间】:2012-05-20 03:02:33
【问题描述】:
我遇到过如下代码:
class a {
public:
void * operator new(size_t l, int nb);
double values;
};
void *a::operator new (size_t l,int n)
{
return new char[l+ (n>1 ? n - 1 : 0)*sizeof(double)];
}
据我所知,它被用于具有从“值”开始的类似数组的结构:
double* Val = &(p->a->values) + fColumnNumber;
我的问题是: 有内存泄漏吗?我对重载 new 运算符非常陌生,但我很确定分配的内存没有正确释放。这是否也意味着我永远无法在堆栈上创建“a”类?
谢谢
【问题讨论】:
-
您显示的代码根本没有释放内存。显示这段代码,否则我们不能说内存是否泄漏。我没有看到怀疑内存泄漏的先验理由,除非
operator delete真的丢失了。 -
它是不见了,这就是我所拥有的一切
-
是的,无论如何,您都需要删除,无论是否重载运算符。是什么让你认为重载
new会以某种方式工作? -
啊,这个问题更有趣了。
-
@KonradRudolph 为什么让这个问题更有趣?它现在恶化为一个简单的缺失析构函数问题,仅此而已。
标签: c++ memory-management operator-overloading new-operator