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

时间:2015-05-26 16:37:57

标签: c++ reference

我遇到过一个我以前没见过的构造,我想知道它的目的是什么:

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

    a.someFunc();
}

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

2 个答案:

答案 0 :(得分:2)

  

这有什么用途?

Stack Overflow上的Rep生成。或许有人故意试图被解雇。

  

为什么不能将它写成SomeClass a(...)

应该是。

  

此外,此代码是否会泄漏内存?我的猜测确实如此,因为new被调用而没有匹配的delete

是的,确实。

答案 1 :(得分:0)

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

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

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

尽管如此,这可能表明SomeClass被严重错误设计,可能试图封装用其他编程语言编写的某些行为。