[*]Когда вы копируете объекты в качестве параметра функции.
При создании объекта путем копирования.
[*]При возврате объекта из функции
Проблема, по-видимому, заключается в том, что существуют методы RVO, NRVO, поэтому в случае номера 3 конструктор копирования может не вызываться.
Код: Выделить всё
// Person class has deep-copy constructor
struct Person {
Person(int age, const char* name) { ... } // logs "default ctor called"
Person(const Person&) { ... }. // logs "copy ctor called"
~Person() { ... } // logs "destructed"
int m_id;
char* m_name;
};
Person g() {
Person p(20, "Jane");
return p; // I assume NRVO happens here
}
int main() {
g(); // book says Copy ctor is called here.
Person p = g(); // Copy ctor is not even called here.
}
Вопрос: Когда эта оптимизация не происходит? Я имею в виду, если это зависит от собственных реализаций компиляторов, каковы общие случаи? Когда не происходит исключения копирования при возврате объекта
Я попробовал следующий код.
Код: Выделить всё
#include
#include
void Print(std::string&& s) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78165066/in-which-cases-rvo-doesnt-happen[/url]
Мобильная версия