2

这是允许的吗?:

class A;
void foo()
{
    static A();
}

当我尝试这样做时,我得到了信号 11,但以下工作正常:

class A;
void foo()
{
    static A a;
}

谢谢你。

4

4 回答 4

4

没有。C++ 中没有“匿名对象”这样的东西。有这样的事情,将对象定义为类型 A 会立即被丢弃;你写的是一个表达式,它返回一个从未分配给变量的 A 对象,就像 printf 的返回码通常从未分配或使用一样。

在该代码中,如果它有效,您将声明“无对象”要在堆外分配。由于没有要分配的对象,因此没有意义。

于 2008-12-24T16:28:54.863 回答
4

您可以创建“匿名”自动变量,但不能创建静态变量。以下将创建 A 类的对象并调用构造函数,然后在函数退出时调用析构函数。

class A;
void foo()
{
    A();
}

您可以通过在堆上分配对象或在预分配位置适当地构造它来获得类似的效果。

void foo()
{
    new A();
}

void foo()
{
    static char memory[sizeof (A)];
    new (memory) A();
}

但是,在这两种情况下,都无法正确清理对象,因为没有保留指针以供以后调用删除。即使将释放静态内存,也永远不会调用析构函数。匿名对象只有在与垃圾收集器一起使用时才真正产生。

于 2008-12-24T16:40:09.880 回答
3

不知何故,我认为这家伙是在单例构造函数的副作用之后。

无论如何,只要给这该死的东西一个变量名就行了。

于 2008-12-24T17:08:03.393 回答
0

C++ 中当然有匿名对象!A(100) 是此示例中的匿名对象

但是,如果您考虑一下,创建静态匿名对象是没有意义的。

于 2009-07-14T17:39:19.957 回答