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". в реальной жизни содержит динамически выделяемые данные, о которых необходимо позаботиться.
Неужели я упускаю что-то очевидное?!