Сообщение Re[2]: Сырые указатели в С++1х от 05.04.2023 10:18
Изменено 05.04.2023 10:25 rg45
Re[2]: Сырые указатели в С++1х
Здравствуйте, sergii.p, Вы писали:
SP>Тогда есть реально проблема, что при хранении ссылки в структуре теряем конструктор копирования.
Конструктор не теряем, оператор присваивания теряем:
http://coliru.stacked-crooked.com/a/98cab16e62e35a90
Таким образом мы можем такие струкуры хранить даже в векторе, начиная с C++11 (при условии, что операция присваивания не применяется к самому контейнеру).
SP>Тогда есть реально проблема, что при хранении ссылки в структуре теряем конструктор копирования.
Конструктор не теряем, оператор присваивания теряем:
http://coliru.stacked-crooked.com/a/98cab16e62e35a90
#include <iostream>
struct A
{
int& x;
void test() const { std::cout << "A: " << x << std::endl; }
};
int main()
{
int i = 42;
A a1 {i};
A a2(a1); // OK
a1.test(); // -> A: 42
a2.test(); // -> A: 42
// a2 = a1; // error: use of deleted function 'A& A::operator=(const A&)'
}
Таким образом мы можем такие струкуры хранить даже в векторе, начиная с C++11 (при условии, что операция присваивания не применяется к самому контейнеру).
Re[2]: Сырые указатели в С++1х
Здравствуйте, sergii.p, Вы писали:
SP>Тогда есть реально проблема, что при хранении ссылки в структуре теряем конструктор копирования.
Конструктор не теряем, теряем только оператор присваивания:
http://coliru.stacked-crooked.com/a/98cab16e62e35a90
Таким образом мы можем такие струкуры хранить даже в векторе, начиная с C++11 (при условии, что операция присваивания не применяется к самому контейнеру).
SP>Тогда есть реально проблема, что при хранении ссылки в структуре теряем конструктор копирования.
Конструктор не теряем, теряем только оператор присваивания:
http://coliru.stacked-crooked.com/a/98cab16e62e35a90
#include <iostream>
struct A
{
int& x;
void test() const { std::cout << "A: " << x << std::endl; }
};
int main()
{
int i = 42;
A a1 {i};
A a2(a1); // OK
a1.test(); // -> A: 42
a2.test(); // -> A: 42
// a2 = a1; // error: use of deleted function 'A& A::operator=(const A&)'
}
Таким образом мы можем такие струкуры хранить даже в векторе, начиная с C++11 (при условии, что операция присваивания не применяется к самому контейнеру).