CPLUSPLUC Telegram 1037
✔️ ЗАДАЧА: Что выведет код?



#include <iostream>
#include <vector>

struct Tracer {
Tracer(const char* name) : name(name) {
std::cout << "Constructing " << name << "\n";
}
~Tracer() {
std::cout << "Destructing " << name << "\n";
}
const char* name;
};

struct Example {
Tracer t1{"t1"};
std::vector<Tracer> list;
Tracer t2{"t2"};

Example() : list{Tracer("temp1"), Tracer("temp2")} {
std::cout << "Inside constructor\n";
}
};

int main() {
Example e;
std::cout << "End of main\n";
return 0;
}


---

ОТВЕТ:

Constructing t1
Constructing temp1
Constructing temp2
Inside constructor
Constructing t2
End of main
Destructing t2
Destructing temp2
Destructing temp1
Destructing t1

---

Почему так:

• Поля инициализируются в порядке объявления в структуре, а не в списке инициализации
• std::initializer_list создаёт временные объекты, которые копируются в вектор
• t2 создаётся после строки Inside constructor
• Деструкторы вызываются в обратном порядке: t2 → temp2 → temp1 → t1

Хитрость — в порядке инициализации, временных объектах и destructuring-порядке!


@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM



tgoop.com/cpluspluc/1037
Create:
Last Update:

✔️ ЗАДАЧА: Что выведет код?



#include <iostream>
#include <vector>

struct Tracer {
Tracer(const char* name) : name(name) {
std::cout << "Constructing " << name << "\n";
}
~Tracer() {
std::cout << "Destructing " << name << "\n";
}
const char* name;
};

struct Example {
Tracer t1{"t1"};
std::vector<Tracer> list;
Tracer t2{"t2"};

Example() : list{Tracer("temp1"), Tracer("temp2")} {
std::cout << "Inside constructor\n";
}
};

int main() {
Example e;
std::cout << "End of main\n";
return 0;
}


---

ОТВЕТ:

Constructing t1
Constructing temp1
Constructing temp2
Inside constructor
Constructing t2
End of main
Destructing t2
Destructing temp2
Destructing temp1
Destructing t1

---

Почему так:

• Поля инициализируются в порядке объявления в структуре, а не в списке инициализации
• std::initializer_list создаёт временные объекты, которые копируются в вектор
• t2 создаётся после строки Inside constructor
• Деструкторы вызываются в обратном порядке: t2 → temp2 → temp1 → t1

Хитрость — в порядке инициализации, временных объектах и destructuring-порядке!


@cpluspluc

BY C++ Academy


Share with your friend now:
tgoop.com/cpluspluc/1037

View MORE
Open in Telegram


Telegram News

Date: |

Add up to 50 administrators It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS): Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” To delete a channel with over 1,000 subscribers, you need to contact user support Choose quality over quantity. Remember that one high-quality post is better than five short publications of questionable value.
from us


Telegram C++ Academy
FROM American