




Неа. В C++ нет такой вещи, как «анонимный объект». Есть такая вещь, как определение объекта типа A, который немедленно отбрасывается; то, что вы написали, является выражением, которое возвращает объект A, который никогда не назначается переменной, например, код возврата printf обычно никогда не назначается и не используется.
В этом коде, если бы это сработало, вы бы объявили «нет объекта» для выделения вне кучи. Поскольку нет объекта для размещения, это бессмысленно.
Вы можете создать «анонимную» автоматическую переменную, но не статическую. Следующее будет создавать объект класса A и вызывать конструктор, а затем вызывать деструктор при выходе из функции.
class A;
void foo()
{
A();
}
Вы можете получить аналогичный эффект, разместив объект в куче или построение на месте в заранее выделенном месте.
void foo()
{
new A();
}
void foo()
{
static char memory[sizeof (A)];
new (memory) A();
}
Однако в обоих случаях объект не может быть правильно очищен, поскольку указатель не удерживается для последующего вызова удаления. Даже если статическая память будет освобождена, деструктор никогда не будет вызван. Анонимные объекты действительно работают только тогда, когда они используются со сборщиком мусора.
Почему-то я думаю, что этот парень после побочного эффекта синглтон-конструктора.
В любом случае, просто дайте этой чертовой штуке уже имя переменной.
Конечно же, анонимные объекты Существуют в C++! A (100) - анонимный объект в этом примере
Однако, если задуматься, нет смысла создавать статический анонимный объект.
Именно поэтому я задаю себе этот вопрос (7 лет спустя). Я хочу создать объект с глобальной областью видимости, но не хочу, чтобы у него было имя. Он регистрирует себя с некоторыми другими объектами в своем конструкторе, поэтому ему не нужно имя.