C++ 对象创建方式(四十八)
2023-09-14 09:09:57 时间
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test()。
这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后在将这些局部变量的内存空间回收。在栈上分配内存空间效率很高,但是分配的内存容量有限。
(3) 从堆上分配的。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。
不使用new创建的对象在栈中分配内存空间,自动调用析构函数删除该对象;
使用new创建的对象在堆中分配内存空间,必须手动释放该对象的内存空间。
1、使用new方式创建类对象
[cpp]
view plain
copy
- CTest* pTest = new CTest();
- delete pTest;
new之前不为该类对象分配任何内存空间,new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。
2、使用变量定义方式创建类对象
[cpp]
view plain
copy
- CTest mTest;
在创建之初就已经分配了内存空间,此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行
3、new创建类对象与不new区别
下面是自己总结的一些关于new创建类对象特点:
- new创建类对象需要指针接收,一处初始化,多处使用
- new创建类对象使用完需delete销毁
- new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
- new对象指针用途广泛,比如作为函数返回值、函数参数等
- 频繁调用场合并不适合new,就像new申请和释放内存一样
相关文章
- VS2022 C++ const char * 类型的实参与LPCWSTR类型的形参不兼容
- C++学习——类和对象
- C++学习——c++逗号操作符说明(附加全部运算符优先级)
- c++ 跨平台线程同步对象那些事儿——基于 ace
- C++ Primer Plus习题及答案-第十二章
- c++-求输出结果
- C/C++开发基础——函数对象与std::function模板
- libcopp接入C++20 Coroutine和一些过渡期的设计
- C++ 中文周刊 第106期
- 【C++修炼之路】9. string类的模拟实现
- 【C++】类和对象 (中篇)
- C++类与对象(三)
- C++类与对象(二)
- [C++]类与对象中篇
- C++ 左值和右值
- c++面向对象设计(谭浩强) 2.4对象成员的引用
- C++面向对象程序设计(谭浩强)第三章 怎样使用类和对象 第一节学习笔记
- C++对象数组中使用构造函数
- C++ valarray对象适用运算符详解
- c++临时对象的来源
- C++中四种对象生存期和作用域以及static的用法总结分析
- c++生成dll使用python调用dll的方法