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  

  • 相关阅读:
    Netty实现Http客户端
    Netty实现Http服务端
    Netty实现Tcp客户端
    Netty实现Tcp服务端
    MySQL进阶系列:一文详解explain
    spring boot 获取运行时的yml里的active配置
    eureka 注册中心添加认证
    zuul 负载
    jenkins spring cloud
    秒杀系统如何设计?
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6475580.html
Copyright © 2011-2022 走看看