只在堆上对象和栈上对象

来源:互联网 发布:ubuntu怎么安装deb 编辑:程序博客网 时间:2024/05/14 20:01
/*如何创建一个类只能在堆上new出来?1、使用重载 operator new()为public和构造函数为private可以吗?ans:重载的aperator new()只能为static类型,因此语法无法调用private的构造函数,而C++语法有没有static friend类型的成员函数,因为既然是frined就不可能为static;2、看来只有private构造函数,static一个成员函数用于new一个对象了。如何创建一个只能存在栈上的对象呢?ans:private化operator new()而public化构造函数*/#include <iostream>using namespace std;class OnlyHeapObject{public:    static OnlyHeapObject* create(int i){        return new OnlyHeapObject(i);    }    void destory(){        delete this;    }protected:    OnlyHeapObject(int i):m_i(i){}    ~OnlyHeapObject(){}    int m_i;};class OnlyStackObject{public:     OnlyStackObject(int i) :m_i(i){}    ~OnlyStackObject(){}private:    static void* operator new(size_t size);    static void operator delete (void* raw, size_t size);    int m_i; };int main(){    OnlyHeapObject* t = OnlyHeapObject::create(9);    t->destory();    OnlyStackObject s(0);    //OnlyStackObject* s2 = new OnlyStackObject(0);    return 0;}
原创粉丝点击