首页 > 系统相关 >C++动态内存分配探秘:new与malloc的关键差异及实例解析

C++动态内存分配探秘:new与malloc的关键差异及实例解析

时间:2024-02-23 09:03:51浏览次数:32  
标签:malloc 示例 C++ 动态内存 MyClass new 构造函数

 

概述:在C++中,new 和 malloc 均用于动态内存分配,但存在关键差异。new是C++运算符,能调用构造函数,返回类型明确;而malloc是C函数,仅分配内存,需手动类型转换。示例源代码生动演示了它们在构造函数调用和类型信息方面的不同。

在C++中,new 和 malloc 都用于动态内存分配,但它们之间有一些重要的区别。以下是对它们的详细描述,包括方法、步骤和相应的示例源代码。

new和malloc的区别:

1.使用方法:

  • new: 是C++的运算符,能够调用对象的构造函数,返回类型明确。
  • malloc: 是C语言的库函数,只分配内存块,返回void*,不会调用对象的构造函数。

2.类型信息:

  • new: 知道所分配的类型,可直接使用。
  • malloc: 返回void*,需要手动进行类型转换。

3.构造函数调用:

  • new: 分配对象时会调用构造函数。
  • malloc: 不调用任何构造函数。

示例源代码:

使用new:

#include <iostream>

class MyClass {
public:
    MyClass() {
        std::cout << "Constructor called." << std::endl;
    }
};

int main() {
    MyClass* obj = new MyClass(); // 使用 new 调用构造函数
    delete obj; // 使用 delete 释放内存
    return 0;
}

使用malloc:

#include <iostream>

class MyClass {
public:
    MyClass() {
        std::cout << "Constructor NOT called." << std::endl;
    }
};

int main() {
    MyClass* obj = (MyClass*)malloc(sizeof(MyClass)); // malloc 不调用构造函数
    free(obj); // 使用 free 释放内存
    return 0;
}

这两个示例清晰地展示了 new 和 malloc 在构造函数调用、类型信息等方面的区别。

 

标签:malloc,示例,C++,动态内存,MyClass,new,构造函数
From: https://www.cnblogs.com/hanbing81868164/p/18028548

相关文章

  • C++强制类型转换详解:四种操作符解析与实例演示
     概述:C++中的强制类型转换是实现数据类型间转换的关键机制,包括static_cast、dynamic_cast、const_cast和reinterpret_cast四种。这些操作符适用于不同的场景,通过实例源代码详细阐述了它们的使用方法和步骤。在C++中,强制类型转换是将一个数据类型的值转换为另一个数据类型的过......
  • C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点
    #include<iostream>//定义一个宏函数#defineADD(x,y)x+y;//宏函数具有速度快等特点但是写代码有些业务比较繁琐,所以C++中使用了内联函数优化//在定义函数前面添加一个inline把这个函数变成内联函数inlineintmax(intx,inty){returnx>y?x:y;}usi......
  • c++ 通过一个临时的空的智能指针(裸指针),交换两个智能指针(裸指针)的值,注意是交换值!!!!
    #include<iostream>#include<memory>usingnamespacestd;structParenTask//父亲{stringname{};};typedefshared_ptr<ParenTask>ParenTaskPtr;structSubTask:ParenTask//孩子{intuid{};};typedefshared_ptr<SubTask&g......
  • M1 MacOS 配置C++环境时遇到的插件问题
    配置环境参照博客:https://www.cnblogs.com/BYGAO/p/15135609.html遇到问题:在Terminal--ConfigureDefaultBuildTasks--C/C++clang++这一步没有C/C++clang++选项。解决方法:shift+command+p打开搜索框,搜索SettingsSync:ShowSettings在IgnoredExtensions中打......
  • C++ 第三节课 指针的使用
    #include<iostream>usingnamespacestd;voidshow(){cout<<"全局函数"<<endl;}structStu{inta;voidwrite_code(){cout<<"成员函数"<<endl;}};intmain(){cout<<......
  • 11. 盛最多水的容器C++
    原本想o(n2)遍历的,结果超时了,果然没这么简单就解决。classSolution{public:ints(vector<int>height,inti,intj){ints1=min(height[i],height[j])*(j-i);returns1;}intmaxArea(vector<int>&height){intmax=0,i=0,j=heigh......
  • ptmalloc、tcmalloc与jemalloc对比分析
    背景介绍在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用自旋锁,在锁冲......
  • 深入理解C++中的堆与栈:内存管理的关键区别与实例解析
     概述:C++中,堆和栈是两种不同的内存分配方式。栈自动分配、释放内存,适用于短生命周期变量;堆需要手动管理,适用于动态分配内存,但需要显式释放以防内存泄漏。通过清晰的示例源代码,演示了它们在变量生命周期、访问方式等方面的区别。C++中的堆(heap)和栈(stack)是两种内存分配和管理方......
  • C++ 继承和派生
      ......
  • C++ 多态 超详细讲解
    C++多态超详细讲解多态概念引入多态字面意思就是多种形态。我们先来想一想在日常生活中的多态例子:买票时,成人买票全价,如果是学生那么半价,如果是军人,就可以优先买票。不同的人买票会有不同的实现方法,这就是多态。1、C++中多态的实现1.1多态的构成条件C++的多态必须满足两......