c++ new用法全解析

一、动态内存分配

c++ new主要用于动态内存分配,可以在程序运行时根据需要分配内存空间。使用new创建的变量是存储在堆上,因此不会随着函数的结束而被清除。

下面是一个简单的示例代码:

#include <iostream>
using namespace std;

int main() {
    int* ptr = new int;
    *ptr = 10;
    cout << "Value of ptr: " << *ptr << endl;
    delete ptr;
    return 0;
}

上述代码中,使用new创建了一个名为ptr的指针,然后把值10存储在指针所指向的地址中。最后使用delete释放内存。

二、数组的动态内存分配

c++ new同样可以用于数组的动态内存分配。使用new创建的数组同样是存储在堆上,因此不会随着函数的结束而被清除。

下面是一个简单的示例代码:

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    int* arr = new int[n];
    for(int i=0; i<n; i++) {
        arr[i] = i+1;
        cout << arr[i] << " ";
    }
    delete[] arr;
    return 0;
}

上述代码中,使用new创建了一个大小为5的数组,然后在for循环中给每个元素赋值并输出。最后使用delete[]释放内存。

三、类的动态内存分配

c++ new还可以用于类的动态内存分配。使用new创建的类对象同样是存储在堆上,因此不会随着函数的结束而被清除。

下面是一个简单的示例代码:

#include <iostream>
using namespace std;

class Person {
public:
    string name;
    int age;
    void introduce() {
        cout << "My name is " << name << ", I'm " << age << " years old." <name = "Tom";
    ptr->age = 25;
    ptr->introduce();
    delete ptr;
    return 0;
}

上述代码中,使用new创建了一个名为ptr的Person指针,然后给属性赋值并调用introduce函数。最后使用delete释放内存。

四、new传入参数

c++ new除了可以不带参数创建变量、数组、对象外,还可以传入参数,用于给新创建的变量、数组、对象进行初始化。

下面是一个简单的示例代码:

#include <iostream>
using namespace std;

int main() {
    // 创建大小为5的int数组,并初始化为0
    int* ptr1 = new int[5]();
    for(int i=0; i<5; i++) {
        cout << ptr1[i] << " ";
    }
    delete[] ptr1;

    // 创建double类型变量,并初始化为3.14
    double* ptr2 = new double(3.14);
    cout << *ptr2 << endl;
    delete ptr2;

    return 0;
}

上述代码中,使用new创建了一个大小为5的int数组,并初始化为0;创建一个double类型变量,并初始化为3.14。最后使用delete或delete[]释放内存。

五、自定义new和delete

c++中可以自定义new和delete,来实现动态内存分配的不同需求。例如,可以通过重载类的new和delete函数,实现自己的内存池,提升内存分配效率。

下面是一个简单的示例代码:

#include <iostream>
using namespace std;

void* operator new(size_t size) {
    cout << "Allocating memory with size " << size << endl;
    void* ptr = malloc(size);
    return ptr;
}

void operator delete(void* ptr) {
    cout << "Freeing allocated memory" << endl;
    free(ptr);
}

int main() {
    int* ptr = new int;
    *ptr = 10;
    cout << "Value of ptr: " << *ptr << endl;
    delete ptr;
    return 0;
}

上述代码中,使用了自定义的new和delete函数,用于输出分配内存的大小和释放内存的信息。

总结

本文详细介绍了c++ new的用法,包括动态内存分配、数组的动态内存分配、类的动态内存分配、new传入参数、自定义new和delete。希望本文能够对使用c++进行编程的开发工程师有所帮助。

原创文章,作者:IRQZG,如若转载,请注明出处:https://www.506064.com/n/333128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
IRQZGIRQZG
上一篇 2025-01-27 13:34
下一篇 2025-01-27 13:34

相关推荐

  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • 如何使用return new crontrigger(cron).nextexecutiontime(triggercontext)实现定时调度

    如果你正在寻找一种可靠且简单的方式来实现定时调度,那么你可能需要了解return new crontrigger(cron).nextexecutiontime(triggerco…

    编程 2025-04-27
  • 深入剖析c++中new的用法

    一、c++中new关键字的概述 new关键字是c++中用来动态地分配内存空间的操作符。使用new运算符可以在程序运行时从堆(heap)中分配内存空间,而delete运算符则可以释放…

    编程 2025-03-12
  • new Date().getTime()详解

    在学习JavaScript基础和开发过程中,我们经常会用到时间处理的相关功能,其中一个重要的方法就是new Date().getTime()。new Date()是一种常用的时间对…

    编程 2025-02-25
  • JavaScript中的new Map()

    一、Map Map是JavaScript中的一种可迭代的键值对容器,其中每个键和值可以是任何类型。在ES6中被提出,它可以用来存储和操作键值对数据。 const myMap = n…

    编程 2025-02-05
  • 深入了解new RegExp

    一、RegExp是什么 RegExp(正则表达式)是JavaScript中处理字符串的强大工具,可以使用它来做验证、替换和提取等操作。在JavaScript中,RegExp是一个内…

    编程 2025-01-27
  • new与malloc的区别和使用

    一、new和malloc的基本概念 new和malloc都是用于动态分配内存的函数。dynamic memory allocation是指在程序运行时动态分配内存,也称堆分配(he…

    编程 2025-01-27
  • New和Malloc的区别

    一、New和Malloc的作用 New和Malloc都是动态内存分配的函数,可以在程序运行时为变量动态分配内存。 New是C++的标准运算符,它为对象动态分配内存,并调用构造函数初…

    编程 2025-01-27
  • c++ new二维数组的使用

    一、创建和初始化二维数组 在c++中,我们可以使用new来创建二维数组,将其声明为指向指针的指针,如下所示: int **arr = new int*[rows]; //创建一个指…

    编程 2025-01-21

发表回复

登录后才能评论