当前位置:网站首页>类如何只能静态分配和只能动态分配
类如何只能静态分配和只能动态分配
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(){
}
};
边栏推荐
- Countdown to 2 days, the "New Infrastructure of Cultural Digital Strategy and Ecological Construction of Cultural Art Chain" will kick off soon
- Utilities of Ruineng Micrometer Chip RN2026
- Dong mingzhu live cold face away, when employees frequency low-level mistakes, no one can understand their products
- 验证码业务逻辑漏洞
- SQL injection in #, - +, - % 20, % 23 is what mean?
- Deep Learning (3) Classification Theory Part
- 打造一份优雅的简历
- docker+bridge+redis master-slave+sentry mode
- 【指针内功修炼】深度剖析指针笔试题(三)
- kingbaseES V8R2/R3 表在指定表空间,为何显示为默认表空间?
猜你喜欢
MCU C language -> usage, and meaning
STM8S105K4T6------Serial port sending and receiving
【医保科普】维护医保基金安全,我们可以这样做
DIY电工维修如何拆卸和安装开关面板插座
SQL injection in #, - +, - % 20, % 23 is what mean?
STM8S project creation (STVD creation) --- use COSMIC to create a C language project
怎样提高网络数据安全性
仿牛客论坛项目梳理
STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
KingbaseES数据库启动失败,报“内存段超过可用内存”
随机推荐
仿牛客论坛项目梳理
What is the source of flinkcdc consuming mysql binlog data without sqltype=delete
"Introduction to nlp + actual combat: Chapter 8: Using Pytorch to realize handwritten digit recognition"
创新互融|华秋赋能助力OpenHarmony生态硬件开发落地
哎,又跟HR在小群吵了一架!
多线程间的通信方式你知道几种?
2022.8.3-----leetcode.899
目标检测-中篇
小程序+新零售,玩转行业新玩法!
Ant - the design of the Select component using a custom icon (suffixIcon attribute) suffixes, click on the custom ICONS have no reaction, will not display the drop-down menu
C language -- ring buffer
自制蓝牙手机app控制stm8/stm32/C51板载LED
Why use Selenium for automated testing
2022杭电多校联赛第五场 题解
为什么用Selenium做自动化测试
The keytool command
全网没有之一的JMeter 接口测试流程详解
MRS: Introduction to the use of Alluxio
移动端响应式适配的方法
new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail