Здравствуйте, VTT, Вы писали:
VTT> еще стоит отметить, что автор забил на перегрузку new[] и delete[]
Не забил, они так же задекларированы в private, я просто в пример их не вынес, т.к. они проблем с линковкой не создают.
VTT> Если уж хочется что-то запрещать, то наверное лучше пометить как = delete.
Если добавить в Obj
private:
friend class MyClass;
void* operator new[](size_t) = delete;
void operator delete[](void*) = delete;
void* operator new(size_t, void*) = delete;
void operator delete(void*, size_t) = delete;
то получаю в MyClass ошибку компиляции
MyClass() : m_(new Obj) { // <-- error C2280
error C2280: 'void Obj::operator delete(void *,size_t)': attempting to reference a deleted function
Это в MSVC 2015. В MSVC 2012 — все хорошо. GCC 5.2 тоже все переваривает без проблем.
Причем ссылка на operator delete(void *,size_t) есть в .obj но при нормальной работе этот оператор не используется (если логировать).