2016-04-19 2 views
1

Мне нужен класс, который реализует общую семантику данных, и, вероятно, std::shared_ptr - это хорошее место для начала. Я думаю, что типичная реализация такого класса может использовать частный shared_ptr для общих данных, а затем реализовать как минимум конструктор копирования и operator=.Общий класс данных с использованием std :: shared_ptr

Что-то вроде:

class SharedDataClass { 

public: 
    SharedDataClass(const SharedDataClass& other) 
    { 
    data_ = other.data_; 
    }; 

    SharedDataClass& operator=(const SharedDataClass& other) 
    { 
    data_ = other.data_; 
    return *this; 
    } 

private: 
    std::shared_ptr<DataType> data_; 
}; 

Я хотел бы спросить, если кто-то имеет некоторую критику, чтобы предложить на вышеуказанной реализации. Есть ли какой-либо другой член/оператор, который должен быть реализован для обеспечения согласованности?

+4

'= default;' кажется достаточно – Jarod42

+1

'std :: shared_ptr data' заботится обо всем этом для вас. –

+0

И есть также конструктор/назначение перемещения. – Jarod42

ответ

5

В этом случае нет необходимости реализовывать конструктор копирования или оператор присваивания. Пусть компилятор определяет тривиальные значения по умолчанию для вас, shared_ptr выполнит задание, которое вы ожидаете.

+0

Это хороший момент, спасибо. Однако это скорее способ получить то, что у меня уже есть, с меньшими усилиями. –

1

Я вижу одну небольшую ловушку. Обычно конструктор по умолчанию не должен быть дефолтным, так как он создаст нулевой указатель data_. Я думаю, что в общем случае желательно, чтобы конструктор по умолчанию создавал указатель data_, содержащий построенный по умолчанию объект DataType.

Смежные вопросы