C++中new和delete如何构建简单对象和复杂对象?

        在C++中,new 和 delete 操作符用于动态分配和释放内存。具体来说,它们可以用于构建简单对象(例如基本数据类型)和复杂对象(例如包含多个成员变量或自定义构造函数和析构函数的类对象)。

一、构建简单对象

1. 简单对象的分配和释放

        对于简单对象,例如基本数据类型(int、double 等),new 和 delete 非常直接。

简单对象的分配:
int* p = new int; // 分配一个int类型的内存并返回指针 
*p = 10; // 赋值
简单对象的释放:
delete p; // 释放之前分配的int类型内存

2. 数组的分配和释放

数组的分配:
int* arr = new int[10]; // 分配一个包含10个int类型元素的数组
数组的释放:
delete[] arr; // 释放之前分配的数组内存

二、构建复杂对象

1. 复杂对象的分配和释放

        对于复杂对象,例如类对象,new 和 delete 会调用构造函数和析构函数。

复杂对象的分配:
class MyClass {
public:
    MyClass() { /* 构造函数代码 */ }
    ~MyClass() { /* 析构函数代码 */ }
};

MyClass* obj = new MyClass;  // 分配MyClass对象并调用构造函数
复杂对象的释放:
delete obj; // 调用析构函数并释放内存

2. 数组的分配和释放

复杂对象数组的分配:
MyClass* arr = new MyClass[10]; // 分配一个包含10个MyClass对象的数组
复杂对象数组的释放:
delete[] arr; // 调用析构函数并释放数组内存

三、完整示例

为了更好地说明,下面是一个完整的示例,展示了如何使用 new 和 delete 来构建和释放简单对象和复杂对象:

#include 

class MyClass {
public:
    MyClass() {
        std::cout << "MyClass constructor called" << std::endl;
    }
    ~MyClass() {
        std::cout << "MyClass destructor called" << std::endl;
    }
};

int main() {
    // 分配和释放简单对象
    int* p = new int;
    *p = 10;
    std::cout << "Value of p: " << *p << std::endl;
    delete p;

    // 分配和释放简单对象数组
    int* arr = new int[5];
    for (int i = 0; i < 5; ++i) {
        arr[i] = i * 10;
        std::cout << "Value of arr[" << i << "]: " << arr[i] << std::endl;
    }
    delete[] arr;

    // 分配和释放复杂对象
    MyClass* obj = new MyClass;
    delete obj;

    // 分配和释放复杂对象数组
    MyClass* objArr = new MyClass[3];
    delete[] objArr;

    return 0;
}

        运行该示例后,将看到构造函数和析构函数的调用,表明对象的构建和释放过程。

注意事项

  1. 内存泄漏:确保每个 new 都有相应的 delete。特别是在异常处理和多路径逻辑中要小心。
  2. 数组的释放:使用 delete[] 释放数组内存,否则行为未定义。
  3. 智能指针:为了自动管理内存释放,C++11 引入了智能指针(例如 std::unique_ptr 和 std::shared_ptr),推荐使用智能指针来避免手动管理内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值