博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
只能在栈上或者堆上创建的对象
阅读量:6125 次
发布时间:2019-06-21

本文共 783 字,大约阅读时间需要 2 分钟。

今天在这里面看到了这个题目,据说还是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  

 

你可能感兴趣的文章
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Hadoop2.5.0 搭建实录
查看>>
实验吧 recursive write up
查看>>
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
查看>>
go test命令參数问题
查看>>
linux 搜索文本
查看>>
超实用Mac软件分享(二)
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
Oracle表分区
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>