zoukankan      html  css  js  c++  java
  • 只能在栈上或者堆上创建的对象

    今天在这里面看到了这个题目,据说还是Google面试题。

    http://www.cnblogs.com/chio/archive/2007/10/23/934335.html

    总的思想,是把一些在栈上或者堆上面创建对象,所必须的函数设为private使得编译报错。

    比如:

    只能在堆上创建,不能在栈上创建。因为栈上的对象,总是要调用析构函数。所以把析构函数设为private,然后new出来的对象,显式的调用delete就可以了。

    class HeapOnly
    {
    public:
        void destroy() const
        {
            delete this;
        }
    
    private:
        ~HeapOnly(){};
    
    };
    
    int main()
    {
        //HeapOnly obj;
        HeapOnly *pobj = new HeapOnly;
        //do things
        pobj->destroy();
        //delete pobj;
    
        return 0;
    }

    也提到Singleton里面的那样方式,把构造函数放进private。但是那样不管直接new,还是在栈上面创建对象,都不能成功。

    不能在堆上创建,只能在栈上面创建的对象。

    就是把new和delete操作符重载为private。

    class  OnlyStack 
    {  
    public:  
         OnlyStack(){}  
    private:  
         void* operator new(size_t  );
         void operator  delete(void*ptr); 
         // 
    }  
     
    int main(  int  argc,  char*  argv[]  )  
    {  
        OnlyStack obj; //  OK  
        //OnlyStack *pobj = new OnlyStack;//  Error  

  • 相关阅读:
    【转】使用Eclipse的几个必须掌握的快捷方式
    【原创】远景能源面试--一面
    vritualenv虚拟环境迁移
    Mysql数据库的增删改查
    Java面向对象的三大特征
    JAVA 数组
    JAVA简介
    web前端瀑布流设计分析
    华为C语言编程规范
    学生成绩管理系统1.0v 完成的学习总结
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6475580.html
Copyright © 2011-2022 走看看