@h_oywksn,
@ispavlick Новая серия подошла. Есть вот такой пример:
class Foo
{
private:
char _buff[256];
public:
Foo(const char* s)
{
printf("Foo(%s)", s);
strcpy(_buff, s);
}
Foo(const Foo &obj)
{
printf("Foo(const Foo &obj)");
}
~Foo()
{
printf("~Foo(%s)", _buff);
memset(_buff, 0, sizeof(_buff));
}
};
Foo begin(const char* s)
{
Foo foo(s);
return foo;
}
void end(const Foo &foo, const char* s)
{
}
void test()
{
Foo foo1 = begin("123");
end(foo1, "123");
Foo foo2 = begin("456");
end(foo2, "456");
}
В итоге такой вывод:
Foo(123)
Foo(456)
~Foo(456)
~Foo(123)
Получается объект создается внутри функции на стеке, но при завершении функции begin() не удаляется и не копируется! Ни деструктор, ни конструктор копирование не вызывается. Деструкторы вызываются только уже при завершении функции test().
Как такое возможно? IAR 8.30.2