Сообщение Re[5]: Доступ к copy-ctor через отдельный метод от 02.04.2022 17:24
Изменено 02.04.2022 17:51 rg45
Re[5]: Доступ к copy-ctor через отдельный метод
Здравствуйте, _hum_, Вы писали:
__>ну, хотелось бы полностью запретить неявные вызовы всех конструкторов, включая конструкторы перемещения.
Конструктор перемещения тоже можно сделать закрытым и это не помешает методу clone работать так, как задумано. Это благодаря наличию Mandatory copy/move elision, о котором я уже упоминал в посте рядом.
http://coliru.stacked-crooked.com/a/65cde38126b17c3
__>ну, хотелось бы полностью запретить неявные вызовы всех конструкторов, включая конструкторы перемещения.
Конструктор перемещения тоже можно сделать закрытым и это не помешает методу clone работать так, как задумано. Это благодаря наличию Mandatory copy/move elision, о котором я уже упоминал в посте рядом.
http://coliru.stacked-crooked.com/a/65cde38126b17c3
#include <iostream>
#include <memory>
class CA
{
std::unique_ptr<int> m_ui;
//^^^^^^^^^^^^^^^^^^^^^^^
CA(const CA& o)
:m_ui(new int(*o.m_ui))
{}
//-----------------------
CA(CA&&)=default;
//-----------------------
public:
//-----------------------
explicit CA(int i):
m_ui(new int(i))
{}
//-----------------------
CA clone() const { return CA(*this);}
//-----------------------
int get(){return *m_ui;}
//-----------------------
};
int main()
{
const CA ca1{42};
const CA ca2 = ca1.clone();
}
Re[5]: Доступ к copy-ctor через отдельный метод
Здравствуйте, _hum_, Вы писали:
__>ну, хотелось бы полностью запретить неявные вызовы всех конструкторов, включая конструкторы перемещения.
Конструктор перемещения тоже можно сделать закрытым и это не помешает методу clone работать так, как задумано. Это благодаря наличию Mandatory copy/move elision, о котором я уже упоминал в посте рядом.
http://coliru.stacked-crooked.com/a/65cde38126b17c3
Фактически метод clone в этих условиях превращается в абсолютно прозраную прокладку для конструктора копирования. Ровно того же эффекта можно было бы добиться, просто объявив конструкторы копировния и перемещения explicit и оставив их открытыми.
__>ну, хотелось бы полностью запретить неявные вызовы всех конструкторов, включая конструкторы перемещения.
Конструктор перемещения тоже можно сделать закрытым и это не помешает методу clone работать так, как задумано. Это благодаря наличию Mandatory copy/move elision, о котором я уже упоминал в посте рядом.
http://coliru.stacked-crooked.com/a/65cde38126b17c3
Код примера | |
| |
Фактически метод clone в этих условиях превращается в абсолютно прозраную прокладку для конструктора копирования. Ровно того же эффекта можно было бы добиться, просто объявив конструкторы копировния и перемещения explicit и оставив их открытыми.