Скопируйте конструктор, не вызываемый на результат функции

GCC вставляет утверждение -- как бы я ни старался это предотвратить. Я пытался

  • -fno-inline
  • -O0
  • __attribute__ ((noinline))
  • dummy asm("")

No success! Здесь код:

#include<iostream>

using namespace std;

struct A {
  A() {cout << "A::A()" <<endl; }
  A(const A& a) {cout << "A::A(copy)" <<endl; }
  A& operator=(const A& a) {cout << "A::=()" <<endl; return *this;}
};

A __attribute__ ((noinline)) func() 
{
  cout << "func()" << endl;
  A loc;
  asm("");
  return loc;
}

int main() {
  A a = func();
}

Неудачный вывод этого (g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2) -

func()
A::A()

Что случилось с оператором A a = func(); ??

Причина этого эксперимента в том, что я хотел бы знать, что происходит, когда исполнение приходит к этому оператору (потому что мне нужен контроль, как это делается):

A a = func();

Я читал, что конструктор копирования вызывается, когда выполняется

A a = b;

(В этом случае вызывается конструктор копирования). Но не в случае A a = func();) Вместо этого функция инкрементируется. Я NEED контролирую это утверждение со времени моего "struct A". в реальной жизни содержит динамически выделяемые данные, о которых необходимо позаботиться.

Неужели я упускаю что-то очевидное?!

6
задан Pharap 18 April 2019 в 18:46
поделиться