c++分配内存后怎么置0

使用new操作符配合构造函数

对于C++中的类对象,当你使用new操作符时,如果类有默认构造函数,并且该构造函数将对象成员初始化为0或某个特定值,那么通过new分配的对象将被自动初始化。但如果你只是分配了原始内存(如int* arr = new int[10];),那么你需要手动初始化。

使用memset

cpp 复制代码
#include <cstring> // 或 #include <memory.h>  
  
int* arr = new int[10];  
memset(arr, 0, 10 * sizeof(int)); // 将arr指向的10个int大小的内存块置为0

使用std::fill

对于STL容器(如std::vector)或数组,你可以使用std::fill来将元素初始化为0。但请注意,对于动态分配的原始数组,你需要先包含<algorithm>头文件,并且使用数组的指针和大小作为参数。

cpp 复制代码
#include <algorithm>  
  
int* arr = new int[10];  
std::fill(arr, arr + 10, 0); // 将arr指向的10个int元素置为0

使用C++11及以后的初始化列表

如果你正在使用C++11或更高版本,并且你正在处理的是STL容器(如std::vector),你可以直接在初始化时使用初始化列表来填充0。

cpp 复制代码
#include <vector>  
  
std::vector<int> vec(10, 0); // 创建一个包含10个0的vector

总结

  • 对于类对象,依赖构造函数进行初始化。
  • 对于原始内存(如数组),使用memset或std::fill进行初始化。
  • 对于STL容器,使用容器提供的初始化方法或std::fill(对于已经存在的容器)。
  • 总是注意内存分配和释放的匹配,避免内存泄漏。
相关推荐
别来无恙1491 小时前
岛屿周长问题的三种解法:直接计数法、数学计算法与深度优先搜索
java·c++·算法·深度优先·dfs
周振超的2 小时前
c++编译第三方项目报错# pragma warning( disable: 4273)
开发语言·c++
愚润求学6 小时前
【递归、搜索与回溯】FloodFill算法(一)
c++·算法·leetcode
uyeonashi6 小时前
【QT系统相关】QT文件
开发语言·c++·qt·学习
sunny-ll7 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
嵌入式@秋刀鱼8 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼8 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
whoarethenext9 小时前
使用 C/C++的OpenCV 裁剪 MP4 视频
c语言·c++·opencv
愚润求学9 小时前
【递归、搜索与回溯】FloodFill算法(二)
c++·算法·leetcode
泽02029 小时前
C++之list的自我实现
开发语言·数据结构·c++·算法·list