lez*_*lon 4 c++ memory-management operator-overloading new-operator
我遇到了以下代码:
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)];
}
Run Code Online (Sandbox Code Playgroud)
从我得到它然后用于具有从"值"开始的数组结构:
double* Val = &(p->a->values) + fColumnNumber;
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有内存泄漏?我对重载新运算符很新,但我很确定分配的内存没有正确释放.这也意味着我永远不能在堆栈上创建一个"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));
}
Run Code Online (Sandbox Code Playgroud)
你可以匹配:
void a::operator delete(void *block)
{
::operator delete(block);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |