面试题:C++如何只在堆上或栈上生成对象
来源:互联网 发布:淘宝为什么没有比价了 编辑:程序博客网 时间:2024/06/02 00:16
栈一般是静态建立一个对象时,由编译器自动创建,而堆通常是调用new来动态开辟内存。
由此可知,如果不能调用new,那么也就无法在堆上生成对象了。我们将operator new和operator delete置为私有部分,类外就无法调用new在堆上生成对象了,也就只能在栈上生成对象。代码如下:
class B{public: B() { cout << "B()" << endl; } ~B() { cout << "~C" << endl; }private: void* operator new(size_t); void operator delete(void*);};void Test(){ //B* ptr = new B(); B b;}
那么如何只在堆上生成对象呢?
我们可以将析构函数置为protected,这样,类外使用静态方法创建对象的时候就会报错,同时要在类外自己提供释放对象的接口。代码如下:
class C{public: static C* Creat() { return new C();//通过静态成员函数完成对象的构造 } void Destroy() { delete this; }protected://将默认构造函数与析构函数设为保护 C() { cout << "C()" << endl; } ~C() { cout << "~C()" << endl; }};void Test(){ //C c;//不可访问 C *pc = C::Creat(); pc->Destroy();}
阅读全文
1 0
- 面试题:C++如何只在堆上或栈上生成对象
- C++如何只在堆上或者栈上生成对象
- C++只在栈或堆上实例化对象
- C++如何只能在堆上或栈上生成对象
- 如何定义一个只能在堆上(或栈上)生成对象的类
- C++ 如何让类对象只在堆或栈上创建
- 只在堆上或只在栈上定义对象
- 只在堆、栈上生成对象的类
- 如何定义一个只在栈/堆上生成的对象
- 如何只在堆或者栈上分配类对象
- 如何只在堆或者栈上分配类对象
- 如何限制一个类对象只在堆上分配或者只在栈上分配?
- 如何限制一个类对象只在堆上分配或者只在栈上分配?
- 如何限制一个类对象只在堆上分配或者只在栈上分配?
- 如何限制一个类对象只在堆上分配或者只在栈上分配?
- 如何限制一个类对象只在堆上分配或者只在栈上分配?
- C/C++如何让类对象只在栈(堆)上分配空间?
- 只在堆上对象和栈上对象
- C# 类的方法
- 【机房重构】-数据库设计
- Android 文件读写和文件夹创建和删除总结
- 大数模板
- Qt 调用CUDA动态库配置
- 面试题:C++如何只在堆上或栈上生成对象
- 软件更新后 version `GLIBCXX_3.4.15' not found
- Web应用安全之OS命令安全隐患
- 指针基础使用详解
- VS2013编写C++程序检测内存泄漏
- CF
- Android 蓝牙RFCOMM/L2CAP 阻塞问题 -- 文件传输失败
- ns安装出现的问题
- 剑指offer——把数组排成最小的数_____