Re[2]: Для чего нужна декларация operator new/delete в private секции класса?
От: s.d.s Россия  
Дата: 30.10.15 10:55
Оценка:
Здравствуйте, 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 но при нормальной работе этот оператор не используется (если логировать).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.