当前位置: 首页 > news >正文

c++:new关键字

目录

基本语法

 使用举例

 应用场景

使用 new 时的注意事项 

基本语法

Type* ptr = new Type;
  • Type 是你要创建的类型(可以是基本类型、结构体、类等)

  • new Type 表示在堆上创建一个 Type 类型的对象

  • ptr 是一个指针,指向这个对象

 使用举例

1. 基本类型

int* p = new int;       // 不初始化
int* q = new int(42);   // 初始化为 42

释放:

delete p;
delete q;

 2. 类对象(调用构造函数) 

class Person {
public:
    std::string name;
    Person(const std::string& n) : name(n) {}
};

Person* p = new Person("Alice");

释放:

delete p;

 构造函数在 new 的时候调用,析构函数在 delete 的时候调用。

 3. 动态数组

int* arr = new int[10];             // 分配10个int(未初始化)
int* arr2 = new int[10]();          // 分配10个int,初始化为0

Person* people = new Person[3];     // 调用默认构造函数3次

释放数组:

delete[] arr;
delete[] arr2;
delete[] people;

 ❗️数组用 new[] 创建,一定要用 delete[] 释放。

 应用场景

1. 动态生命周期管理 

Person* createPerson() {
    return new Person("Tom");
}  // 返回了对象的地址,对象仍然存在

 2. 创建大小在运行时才能确定的数组

int n;
std::cin >> n;
int* arr = new int[n];  // 普通数组不支持动态大小

 3. 面向对象 + 多态时必须用指针(虚函数才生效)

Base* obj = new Derived();

4.调用构造函数 

Person* p = new Person("Alice");  // 自动初始化

malloc()(C语言方式)只分配内存,不会调用构造函数。

这也是为什么:C++ 推荐使用 new 而不是 malloc,因为它支持对象语义(构造/析构)。 

使用 new 时的注意事项 

1.不要忘记释放内存,否则内存泄漏。 

int* p = new int(5);
// ...
delete p;  // 别忘了

2. 数组必须用 delete[] 释放,不要混用:

int* arr = new int[10];
delete arr;       // ❌ 错误:只释放第一个元素,未调用其余析构函数

delete[] arr;     // ✅ 正确

 3.指针赋值要小心内存泄漏:

int* p = new int(10);
p = new int(20);  // ❌ 之前的 10 没有 delete,泄漏了

相关文章:

  • 深度学习(对抗)
  • forms实现快读阅读器
  • 操作系统 第三章 内存管理
  • 爬虫:IP代理
  • HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)
  • Arm CPU安全通告:基于TrustZone的Cortex-M系统面临多重故障注入攻击
  • linux多线(进)程编程——(5)虚拟内存与内存映射
  • 14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)
  • 【Linux】what is pam?PAM模块学习笔记
  • CTF-WEB排行榜制作
  • JavaWeb 课堂笔记 —— 10 MySQL DML + DQL
  • Node.js介绍
  • vue入门:函数式组件
  • 实现一个动态验证码生成器:Canvas与JavaScript的完美结合
  • 《C语言中的形参与实参:理解函数调用的核心概念》
  • NVIDIA AI Aerial
  • docker 安装 jenkins
  • SpringBoot实战2
  • 【强化学习-蘑菇书-3】马尔可夫性质,马尔可夫链,马尔可夫过程,马尔可夫奖励过程,如何计算马尔可夫奖励过程里面的价值
  • 奇怪的电梯——DFS算法
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教
  • 下周或迎外贸“抢出口”高峰,跨境电商敏感货物如何便利化“登机”?
  • 武大校长:人工智能不存在“过度使用”,武大不会缩减文科
  • 央视起底“字画竞拍”网络传销案:涉案44亿元,受害者众多
  • 在本轮印巴冲突的舆论场上也胜印度一筹,巴基斯坦靠什么?
  • 普京召开俄乌谈判筹备会议,拉夫罗夫、绍伊古等出席