Итак, у меня есть класс выходного потока, которому принадлежит указатель на класс, который фактически выполняет запись, и мне нужен конструктор копирования, чтобы я мог возвращать инициализированные экземпляры из функции, чтобы я мог прозрачно связать определенные значения с Пользователь. Чтобы иметь разумную семантику копирования, я действительно хотел бы очистить указатель писателя в скопированном объекте и закрыть его, делая его непригодным для использования во время копирования.
Я могу сделать это с помощью неконстантного конструктора копирования, а-ля:
class Test {
public:
Test(Test& other);
};
Но я хочу иметь возможность назначать напрямую из временного значения, возвращаемого вызовом функции:
Test test = make_test();
Конструктор копирования должен быть постоянным. Поэтому мне любопытно, каковы будут последствия использования const_cast в конструкторе копирования. Я бросил бы другую ссылку на неконстантный указатель и очистил указатель писателя, который я упомянул. Я знаю, что const_cast вообще считается злом, но может ли он работать в этом случае? Мне особенно любопытно, как он будет взаимодействовать с временными объектами, возвращаемыми при вызове функции.
В качестве альтернативы есть только четыре функции создания, которые я действительно хочу иметь доступ к конструктору копирования, если бы был разумный способ расширить его так, чтобы он мог использоваться только этими функциями (включая их возвращаемые значения), тогда я бы предпочитаю это.