SomeClass &a = *new SomeClass(...)

SomeClass &a = *new SomeClass(...)

我遇到了一个以前从未见过的结构,想知道它的目的是什么:

{
    SomeClass &a = *new SomeClass(...);

    a.someFunc();
}

如果我的理解是正确的,a 是对 SomeClass 的引用,并且是通过 new 创建的。这有什么用?即,为什么不能写成 SomeClass a(...)?另外,这段代码会泄漏内存吗?我的猜测是它确实如此,因为调用 new 时没有匹配 delete.

What purpose does this serve?

Stack Overflow 上的代表生成。或者也许有人故意试图被解雇。

why couldn't this have been written as SomeClass a(...)

应该是。

Also, does this code leak memory? My guess is that it does, as new is called with no matching delete.

是的,确实如此。

这表明SomeClass是一个奇怪的非标准对象,只能在堆上创建,不能在栈上创建,也不能静态创建。所以你应该注意 SomeClass 做的其他奇怪的事情:

  • 它可能会在其构造函数中创建一个新线程来接管对象的所有权。

  • 对象的某些方法可能会在某个时候隐式删除它。

也就是说,这可能表明 SomeClass 的设计存在严重错误,可能是为了试图封装用其他编程语言编写的某些行为。