Для чего нужна декларация operator new/delete в private секции класса?
От: s.d.s Россия  
Дата: 30.10.15 09:24
Оценка:
Проект QtScript.
Есть участок кода, который можно свести вот к такому:

class Obj {
public:
    Obj() {
        cout << "Obj()" << endl;
    }
    ~Obj() {
        cout << "~Obj()" << endl;
    }
    void* operator new(size_t sz) {
        cout << "operator new(size_t)" << endl;
        return ::operator new(sz);
    }
    void operator delete(void* p) {
        cout << "operator delete(void*)" << endl;
        ::operator delete(p);
    }
private:
    friend class MyClass;
    void* operator new(size_t, void*);
    void operator delete(void*, size_t);
};

class MyClass {
public:
    MyClass() : m_(new Obj) {
        cout << "MyClass()" << endl;
    }
    ~MyClass() {
        cout << "~MyClass()" << endl;
        delete m_;
    }
private:
    const Obj * m_;
};


1. Какие возможные цели преследует декларация operator new(size_t, void*), operator delete(void*, size_t) в классе Obj

a) если смотреть по стандарту < C++14
b) >= C++14

2. MSVC 2015 выдает ошибку

error LNK2001: unresolved external symbol "private: static void __cdecl Obj::operator delete(void *,unsigned int)"


Будет ли для него равнозначной замена?

enum class Obj_tag : size_t {};
void operator delete(void*, Obj_tag);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.