我是新来的,我已经知道“ new”运算符可以重载,当我调用“ new”时,它将先调用“ operator new”,然后再调用“ constructor”,所以我的问题是当我在公共区域超载新对象时,可以单例模式创建新对象吗?
class MyClass{
MyClass(){
cout<<"contructor"<<endl;
}
public:
static MyClass* getInstance()
{
static MyClass* mm = new MyClass();
return mm;
}
void* operator new(size_t size)
{
cout<<"allocate memory\n";
void* p = malloc(size);
return p;
}
};
int main() {
MyClass* m = new MyClass();
return 0;
}
答案 0 :(得分:1)
当我致电
new
时,它将首先致电operator new
是
然后是构造函数
或者至少它将尝试。问题在于构造函数是私有的,因此不允许从类外部进行调用。
对构造函数的调用来自new
表达式的范围(因此,在您的情况下是“来自main
”),而不是operator new
的范围。