0

0

c++怎么new一个对象_C++使用new关键字动态创建对象详解

尼克

尼克

发布时间:2025-10-17 21:06:02

|

801人浏览过

|

来源于php中文网

原创

new用于在堆上分配内存并调用构造函数创建对象,支持带参构造和数组创建,需用delete或delete[]释放内存,推荐使用智能指针自动管理,避免内存泄漏。

c++怎么new一个对象_c++使用new关键字动态创建对象详解

在C++中,new 关键字用于在堆(heap)上动态分配内存,并可同时调用构造函数创建对象。相比上创建对象,使用 new 可以灵活控制对象的生命周期,适用于需要在运行时决定是否创建对象或对象大小不确定的场景。

new 的基本语法

使用 new 创建对象的基本格式如下:

MyClass* obj = new MyClass();

这条语句做了两件事:

  • 在堆上分配足够存放 MyClass 对象的内存
  • 调用 MyClass 的构造函数初始化这块内存

返回的是指向新创建对象的指针,类型为 MyClass*

立即学习C++免费学习笔记(深入)”;

带参数的构造函数如何使用 new

如果类的构造函数需要参数,可以在 new 后面用括号传入:

MyClass* obj = new MyClass(10, "hello");

这会调用匹配的构造函数,完成初始化。确保参数类型与构造函数声明一致,否则编译会报错。

数组对象的动态创建

要创建对象数组,使用 new 加方括号:

造次
造次

Liblib打造的AI原创IP视频创作社区

下载
MyClass* arr = new MyClass[5];

这会调用 5 次 MyClass 的默认构造函数。注意:如果类没有默认构造函数,这段代码将无法编译。

释放数组必须使用 delete[],而不是 delete:

delete[] arr;

内存释放与 delete 的使用

使用 new 创建的对象不会自动销毁,必须手动释放,否则会导致内存泄漏:

delete obj;

delete 会先调用对象的析构函数,再释放内存。忘记 delete 或重复 delete 都是常见错误。

建议:搭配智能指针(如 std::unique_ptr 或 std::shared_ptr)使用,可自动管理内存:

std::unique_ptr obj = std::make_unique(arg1, arg2);

超出作用域后自动释放,更安全。

常见问题与注意事项

  • new 失败时会抛出 std::bad_alloc 异常,可在不支持异常的环境中使用 nothrow 版本:
    MyClass* obj = new(std::nothrow) MyClass();
    失败时返回 nullptr,需检查指针有效性。
  • 避免裸指针长期持有 new 出来的对象,优先使用 RAII 和智能指针。
  • 不要混合使用 new/delete 与 malloc/free,它们管理不同的内存区域和机制。

基本上就这些。掌握 new 的用法是理解C++资源管理的基础,但现代C++更推荐用智能指针替代直接使用 new。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

269

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2023.12.29

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

2

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

39

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

101

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 12.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号