7.1指针动态内存演示
C风格 malloc/free,C++裸指针 new/delete,现代 C++ make_unique / (自动释放)
演示视频 :https://www.bilibili.com/video/BV1ezAbzFENq/
#include <cstdlib> // for malloc/free
#include <cstring> // for memset
#include <memory> // for std::unique_ptr
#include <iostream>
/**
* 练习:学习C指针malloc/free,C++裸指针new/delete, 现代智能指针
* C 风格: malloc -> ... -> free
* C++ 裸指针: new -> ... -> delete
* 现代 C++: make_unique -> ... -> (自动释放)
*/
int main()
{
#ifdef _WIN32
// Windows 平台下,设置控制台输出编码为 UTF-8
system("chcp 65001 > nul");
#endif
// C 风格: malloc -> ... -> free
int *p_c = (int *)malloc(sizeof(int));
if (p_c != NULL)
{
*p_c = 42;
free(p_c);
p_c = NULL; // 释放后置空
}
int *arr_c = (int *)malloc(10 * sizeof(int));
if (arr_c != NULL)
{
memset(arr_c, 0, 10 * sizeof(int)); // 清零
for (int i = 0; i < 10; ++i)
{
*(arr_c + i) = i * 10; // 赋值
}
free(arr_c);
arr_c = NULL; // 释放后置空
}
// C++ 裸指针: new -> ... -> delete
int *p_cpp = new int(42);
delete p_cpp;
p_cpp = nullptr; // 释放后置空
int *arr_cpp = new int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
delete[] arr_cpp;
arr_cpp = nullptr; // 释放后置空
// 现代 C++: make_unique -> ... -> (自动释放)
// 使用 std::unique_ptr 管理动态数组,无需手动 delete
std::unique_ptr<int[]> arr_unique = std::make_unique<int[]>(10);
// 赋值
for (int i = 0; i < 10; ++i)
{
arr_unique[i] = i * 10;
}
// 访问(示例)
for (int i = 0; i < 10; ++i)
{
std::cout << arr_unique[i] << " ";
}
std::cout << std::endl;
// 离开作用域时 arr_unique 自动释放内存,无需手动调用 delete[]
return 0;
}
