GCC содержит утверждение - как бы я ни старался его предотвратить. Я пытался
-fno-inline
-O0
__attribute__ ((noinline))
dummy asm("")
Нет успеха!
Вот код:
#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 контролирую это утверждение, так как моя "структура А"
в реальной жизни содержит динамически распределяемые данные, о которых нужно позаботиться.
Я что-то упускаю здесь очевидное? *