为什么尽管“ new”已被覆盖,但c ++单例不能新

时间:2018-09-21 10:11:04

标签: c++ singleton operator-keyword new-operator

我是新来的,我已经知道“ 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;
}

1 个答案:

答案 0 :(得分:1)

  

当我致电new时,它将首先致电operator new

  

然后是构造函数

或者至少它将尝试。问题在于构造函数是私有的,因此不允许从类外部进行调用。

对构造函数的调用来自new表达式的范围(因此,在您的情况下是“来自main”),而不是operator new的范围。