Информация об изменениях

Сообщение Re[2]: Сырые указатели в С++1х от 05.04.2023 10:18

Изменено 05.04.2023 10:29 rg45

Re[2]: Сырые указатели в С++1х
Здравствуйте, sergii.p, Вы писали:

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

#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.