網(wǎng)站首頁 編程語言 正文
存儲方案和動態(tài)分配
在之前的文章當(dāng)中,我們討論了C++用來為變量分配內(nèi)存的5種方案,但是這些方案并不適用于使用new
運算符分配的內(nèi)存,這種內(nèi)存被稱為動態(tài)內(nèi)存。
我們在之前的文章當(dāng)中也曾介紹過,動態(tài)內(nèi)存由new
和delete
控制,而不是由作用域和鏈接性規(guī)則控制。所以我們可以在一個函數(shù)當(dāng)中分配動態(tài)內(nèi)存,在另外一個函數(shù)中釋放。
通常C++編譯器當(dāng)中有三塊獨立的內(nèi)存,一塊用于靜態(tài)變量,一塊用于自動變量,還有一塊用于動態(tài)存儲。
雖然存儲方案的概念不適用于動態(tài)內(nèi)存,但是適用于動態(tài)內(nèi)存的自動和靜態(tài)指針。C++ Primer
當(dāng)中有這么一個例子,我們在一個函數(shù)當(dāng)中有如下語句:
float * p_fees = new float[20];
很明顯,我們通過new
創(chuàng)建了一個長度為20的float
數(shù)組,這塊數(shù)組的內(nèi)存將會一直停留在內(nèi)存當(dāng)中,直到使用delete
語句釋放。但當(dāng)該函數(shù)運行結(jié)束的時候,p_fees
這個指針將會消失。如果希望在其他地方能夠使用這個數(shù)組,需要將地址通過某種方式返回或者傳遞。
如果我們將p_fees
的鏈接性聲明為外部的,那么我們在其他地方都可以訪問到了,如果另外的文件當(dāng)中需要訪問,也同樣可以使用關(guān)鍵字extern
。
初始化
前面講了使用new
申請內(nèi)存的方法,如果我們想要在分配內(nèi)存的同時完成變量的初始化,應(yīng)該怎么辦呢?
如果要為內(nèi)置的標量類型分配空間并初始化,可以在類型名后面加上初始值,并將它用括號括起來:
int *pi = new int(3); double *pd = new double(99.9);
如果我們要初始化結(jié)構(gòu)體或者是數(shù)組,則需要使用大括號的列表初始化,這需要編譯器支持C++11,這是C++11中的新特性:
struct P { int x, y; }; P *p = new P{3, 4}; int *arr = new int[4] {2, 3, 4, 5};
在C++11當(dāng)中也支持對單值變量使用列表初始化:
double *pd = new double(99.99);
相關(guān)推薦
- 2024-01-12 Springboot測試類中 @Before與@BeforeEach的區(qū)別
- 2023-04-24 pandas常用表連接merge/concat/join/append詳解_python
- 2022-08-20 Redis+AOP+自定義注解實現(xiàn)限流_Redis
- 2023-07-08 css如何給div添加一個條紋背景,在背景上畫一條有寬度的斜線
- 2023-10-31 WebSocket消息推送
- 2022-08-13 beginInvoke加回調(diào)函數(shù)lamad
- 2022-12-10 Android入門之ScrollView的使用教程_Android
- 2022-11-29 Mybatis傳入?yún)?shù)類型不匹配導(dǎo)致的報錯:
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支