C++ 匿名对象能否在C++;?

C++ 匿名对象能否在C++;?,c++,static,anonymous,C++,Static,Anonymous,允许这样做吗 class A; void foo() { static A(); } 我尝试执行此操作时收到信号11,但以下操作正常: class A; void foo() { static A a; } 谢谢。没有。C++中没有“匿名对象”这类东西。有这样一种事情,定义一个对象为类型a,然后立即丢弃;您编写的是一个表达式,它返回一个从未分配给变量的对象,就像printf的返回代码通常从未分配或使用一样 在该代码中,如果它起作用,您将声明“没有对象”要分配到堆外。因为没有要

允许这样做吗

class A;
void foo()
{
    static A();
}
我尝试执行此操作时收到信号11,但以下操作正常:

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

谢谢。

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

在该代码中,如果它起作用,您将声明“没有对象”要分配到堆外。因为没有要分配的对象,所以没有意义。

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

class A;
void foo()
{
    A();
}
通过在堆上或在预分配的位置分配对象,可以获得类似的效果

void foo()
{
    new A();
}

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

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

不知何故,我认为这家伙追求的是单例构造函数的副作用


无论如何,只要已经给DARN变量变量名。

< P>当然<强> C++中有<强>匿名对象! 在这个样本中


然而,如果你仔细想想,创建静态匿名对象是没有意义的。

这正是我发现自己在研究这个问题的原因(7年后)。我想创建一个具有全局作用域的对象,但不希望它有名称。它使用构造函数中的一些其他对象注册自己,因此不需要名称。