Проект 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);