当前位置:网站首页>类如何只能静态分配和只能动态分配
类如何只能静态分配和只能动态分配
2022-08-04 03:11:00 【打不倒小蚂蚁】
概念
- 静态分配
编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。举个例子:
A a
- 动态建立
堆空间中分配内存。这个过程分为两步:
【第一步】执行operator new( )函数,在堆空间中进行内存分配;
【第二步】调用类的构造函数构造对象。
静态分配
思路
- 要限制new运算符就可以实现类对象只能建立在栈上。这样就可以限制类对象调用new运算符。
class A {
private:
void* operator new(size_t t){
} //设置为私有
void operator delete(void* ptr){
} //重载了new就需要重载delete。对应重载。
public:
A(){
}
~A(){
}
};
动态分配
有以几点需要注意。
- 仅允许动态分配需要禁止直接调用构造函数。但是需要间接调用构造函数,因此不能将构造函数设为private。
- 编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性(其实不光是析构函数,只要是非静态的函数,编译器都会进行检查)。如果类的析构函数在类外部无法访问,则编译器拒绝在栈空间上为类对象分配内存。这样也就禁止了静态分配。因此,可以将析构函数定义为私有。
- 由于将析构函数定义为私有,需要额外定义析构函数释放内存。
class A {
public:
A(){
}
void destory(){
delete this;}
private:
~A(){
}
};
边栏推荐
- 移动端响应式适配的方法
- 2022杭电多校联赛第五场 题解
- Mini program + new retail, play the new way of playing in the industry!
- [Study Notes Dish Dog Learning C] Dynamic Memory Management
- TOML configuration file format, YAML's top contender
- 千兆2光8电管理型工业以太网交换机WEB管理X-Ring一键环网交换机
- There are n steps in total, and you can go up to 1 or 2 steps each time. How many ways are there?
- 函数,递归以及dom简单操作
- 【项目实现】Boost搜索引擎
- 案例 | 重庆银行流动数据安全挑战及应对实践
猜你喜欢

小程序+新零售,玩转行业新玩法!

C language -- ring buffer

自制蓝牙手机app控制stm8/stm32/C51板载LED

自定义通用分页标签02
SQL注入中 #、 --+、 --%20、 %23是什么意思?

6-port full Gigabit Layer 2 network managed industrial Ethernet switch Gigabit 2 optical 4 electrical fiber self-healing ERPS ring network switch

4-way two-way HDMI integrated business high-definition video optical transceiver 8-way HDMI high-definition video optical transceiver

脚手架内容详解分析

机器学习模型的“可解释性”
sql注入一般流程(附例题)
随机推荐
[Playwright Test Tutorial] 5 minutes to get started
FFmpeg —— 通过修改yuv,将视频转为黑白并输出(附源码)
【翻译】Terraform和Kubernetes的交集
创新互融|华秋赋能助力OpenHarmony生态硬件开发落地
小程序+新零售,玩转行业新玩法!
4-way two-way HDMI integrated business high-definition video optical transceiver 8-way HDMI high-definition video optical transceiver
脚手架内容详解分析
为什么用Selenium做自动化测试
一个属于程序员的七夕节!
一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
2千兆光+6千兆电导轨式网管型工业级以太网交换机支持X-Ring冗余环网一键环网交换机
【MD5】采用MD5+盐的加密方式完成注册用户和登录账号
FPGA解析B码----连载3
Brush esp8266-01 s firmware steps
2022杭电多校联赛第五场 题解
SQL injection in #, - +, - % 20, % 23 is what mean?
keytool命令
Utilities of Ruineng Micrometer Chip RN2026
机器学习模型的“可解释性”
docker+网桥+redis主从+哨兵模式