<div class="markdown_views"><h1 id="new创建类对象与直接定义的区别">new创建类对象与直接定义的区别<button class="cnblogs-toc-button" title="显示导航" aria-expanded="false"></button></h1>

new创建对象的特点

  • new创建类对象需要指针接收,一处初始化,多处使用
  • new创建类对象使用完需delete销毁
  • new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
  • new对象指针用途广泛,比如作为函数返回值、函数参数等
  • 频繁调用场合并不适合new,就像new申请和释放内存一样

new创建类对象实例

1、new创建类对象例子:

CTest* pTest = new CTest();delete pTest;

pTest用来接收类对象指针。

不用new,直接使用类定义申明:

CTest mTest;

此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。而new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。

2、只定义类指针

这跟不用new申明对象有很大区别,类指针可以先行定义,但类指针只是个通用指针,在new之前并为该类对象分配任何内存空间。比如:

CTest* pTest = NULL;

但使用普通方式创建的类对象,在创建之初就已经分配了内存空间。而类指针,如果未经过对象初始化,则不需要delete释放。

3、new对象指针作为函数参数和返回值

下面要示意一下类指针对象作为返回值和参数使用。

class CTest
{
public:   int a;
};    class CBest
{
public:  int b;
};   CTest* fun(CBest* pBest)
{   CTest* pTest = new CTest();   pTest->a = pBest->b;return pTest;
}    int main()
{   CBest* pBest = new CBest();   CTest* pRes= fun(pBest);     if(pBest!=NULL)    delete pBest;   if(pRes!=NULL)    delete pRes ;   return -1;
}

new创建类对象与直接定义的区别相关推荐

  1. JavaScript 创建类/对象的几种方式

    在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量 ...

  2. C++ 对象和实例的区别,以及用new和不用new创建类对象区别

    起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题.当然这都是跟new的用法有关的.ne ...

  3. python 元类 type_Python 使用元类type创建类对象常见应用详解

    本文实例讲述了Python 使用元类type创建类对象.分享给大家供大家参考,具体如下: type("123") 可以查看变量的类型;同时 type("类名", ...

  4. C++用new和不用new创建类对象区别

    来自博文: 1. https://www.cnblogs.com/kissfu/p/3301436.html 2. https://blog.csdn.net/chen_jint/article/de ...

  5. C++创建类对象时(无参)后不加括号与加括号的区别

    在不考虑用new动态创建对象的情况下,用最普通的 类名 对象名(参数); 的方法创建对象 先贴上最正常最普通的代码 #include<iostream> using namespace s ...

  6. python3 动态创建类对象并调用函数

    1. 首先import相关模块`import importlib` 2. 加载你想要加载的模块`model = importlib.import_module(模块名称)` 3. 获取类对象`api_ ...

  7. 看完这篇你还敢说分不清 Java 类 对象 实例 变量间的区别?

    看完这篇你还敢说分不清 Java 类 对象 实例 变量间的区别? 什么是类? 什么是对象? 什么是变量? 对象和类的关系: Java中的类: Java中的对象 Java中的变量 Java 中调用 对象 ...

  8. 【C++学习】对私有构造析构函数的思考:new一个类对象vs直接创建类对象

    前置知识: new的类对象需要手动delete.且使用堆空间.且只能用指针接收. 直接创建的类对象创建在栈中(或说堆栈).不需要手动delete,随着生存周期的结束(如所在的函数return了)而释放 ...

  9. python 类构造函数_Python构造函数创建类对象

    python 类构造函数 In the last tutorial, we learned how to create a class, its instance and how to access ...

最新文章

  1. tf.keras.layers.LSTM 示例
  2. 问题记录之用poi生成图片并插入到word时,图片中的中文显示不出来
  3. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
  4. 成功解决object at 0x000002463192BAC8
  5. L2-1 包装机 (25 分)
  6. c读取txt文件内容并建立一个链表_面试官给我挖坑:rm删除文件之后,空间就被释放了吗?...
  7. eclipse环境变量的配置
  8. C++ RGB转灰度图像
  9. STM32H7的终极调试组件Event Recorder
  10. 大风起兮云飞扬 —记2011年的中国云计算
  11. 2021年电工(初级)报名考试及电工(初级)考试资料
  12. Map接口以及那些实现类
  13. MinGW与Clion下载安装及使用详解
  14. NLP中的attention机制总结
  15. vim 重新编译,支持lua (compile vim with lua)
  16. ubuntu 笔记本亮度调节
  17. phalapi可以依赖注入么_[7.8]-phalapi-进阶篇2(DI依赖注入和单例模式) | PhalApi(π框架) - PHP轻量级开源接口框架...
  18. c语言求某年某月1日是星期几,蔡勒(Zeller)公式:根据日期推算是星期几
  19. 斯坦福SCI论文写作课笔记(十三)
  20. Unity 触摸事件的运用

热门文章

  1. 网速快慢与网线材质的选择关系
  2. Pytorch 安装(CPU)
  3. smart-sso单点登录(三):App登录支持
  4. 沙盒隔离技术的本质与背景
  5. php直播源码,图片亮度
  6. UUID和GUID的区别
  7. Javascript对日期的进行加、减操作
  8. 一名准菜鸟程序员(bushi)的自我介绍
  9. 批处理框架 Spring Batch 这么强,你会用吗?
  10. CentOS 6.3安装配置LAMP服务器(Linux+Apache+MySQL+PHP5)