gpt4 book ai didi

c++ - 以下是新的重载泄漏内存吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:28 26 4
gpt4 key购买 nike

我遇到过如下代码:

    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”类?

谢谢

最佳答案

我相信它在技术上会按原样产生 UB,尽管它是 UB 的一种形式,可能永远不会引起可见的副作用(它使用 new [],但我相信它会匹配使用 delete - 但对于 char,这通常不会导致明显的问题)。

IMO,更糟糕的是它使用新表达式来分配真正应该是原始字节而不是对象的内容。如果我这样做,我会这样写:

void *a::operator new (size_t l,int n)
{
return ::operator new(l+ (n>1 ? n - 1 : 0)*sizeof(double));
}

你会把它与:

void a::operator delete(void *block)
{
::operator delete(block);
}

关于c++ - 以下是新的重载泄漏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10552656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com