У меня есть вопрос о хорошем стиле C++: Я хотел бы написать класс «MyClass», в котором есть один или несколько указателей в качестве элементов, и MyClass может выделить память к этим указателям. Я хотел бы использовать неявное представление default-copy-constructor (а также оператор присваивания по умолчанию) для копирования экземпляра MyClass, так что копируются только указатели, а новый объект разделяет данные, которые исходный объект имеет выделены.Помните оригинальный объект, который просто управляет общей памятью
Моя идея состояла в том, чтобы запретить копирование объектов (созданных с помощью конструктора копирования или оператора присваивания) для освобождения памяти (а также выделения памяти указателям на элементы). Для того, чтобы distinguesh между скопированными объектами и исходными объектами (созданного конструктором), я хочу использовать следующий код:
class MyClass
{
public:
MyClass(): originalPtr(this) { data = new char[100000]; }
~MyClass() { if(originalPtr == this) delete[] data; }
private:
MyClass *originalPtr;
char *data; // shared data (not copiable)
char otherFeatures[10]; // individual data (copiable)
};
Будет ли это решение (используя сравнение с this
-указателем) хороший стилем для таких цель (например, разбор объекта по вызову по значению) или он рискован? Конечно, я предполагаю, что исходный объект живет всегда дольше, чем скопированные объекты.
Спасибо!
Если оригинал всегда живет дольше, чем копии, зачем копировать вообще, а не раздавать ссылки? –
Для предоставления отдельных данных копий (намечено «otherFeatures»). –
Почему бы не использовать 'shared_ptr' или подобное? – Petr