您的位置:

用C++创建新对象来管理动态内存

一、使用new关键字新建单个对象管理动态内存

class Person {
public:
    Person() {
        cout << "Person object created!" << endl;
    }
    ~Person() {
        cout << "Person object destroyed!" << endl;
    }
};

int main() {
    Person* p = new Person();   // 使用new关键字创建Person对象
    // 使用p指针访问Person对象的成员函数和成员变量
    delete p;                   // 删除使用new创建的对象
    return 0;
}

使用new关键字来动态分配内存空间,可以根据当前程序的需求大小灵活分配,在程序运行时根据需要释放已经使用的资源。但是在使用完动态内存后,一定要使用delete关键字来释放已经使用的资源,否则会导致内存泄漏。

二、使用new关键字新建数组管理动态内存

class Person {
public:
    Person() {
        cout << "Person object created!" << endl;
    }
    ~Person() {
        cout << "Person object destroyed!" << endl;
    }
};

int main() {
    Person* p = new Person[5];   // 使用new关键字创建Person对象的数组
    // 使用p指针访问Person对象数组的成员函数和成员变量
    delete[] p;                  // 删除使用new创建的对象数组
    return 0;
}

在使用new来创建数组管理动态内存时,需要使用delete[]来释放动态分配的内存,因为使用new来创建数组而没有使用delete[]来释放内存会导致内存泄漏。

三、使用智能指针管理动态内存

#include 

class Person {
public:
    Person() {
        cout << "Person object created!" << endl;
    }
    ~Person() {
        cout << "Person object destroyed!" << endl;
    }
};

int main() {
    shared_ptr
    p = make_shared
    ();   // 使用make_shared函数创建智能指针
    // 使用p指针访问Person对象的成员函数和成员变量
    return 0;                                        // 函数结束时智能指针会自动释放内存
}

    
   
  

智能指针可以自动释放内存空间,在指针对象生命周期结束时自动调用析构函数。C++11的标准库中提供了两种智能指针,shared_ptr和unique_ptr。shared_ptr和unique_ptr的区别在于,shared_ptr可以和多个指针共享同一个对象,而unique_ptr则只能指向一个对象。

四、使用RAII技术实现动态内存管理

class Resource {
public:
    Resource() {
        cout << "Resource acquired!" << endl;
    }
    ~Resource() {
        cout << "Resource released!" << endl;
    }
};

class RAII {
public:
    RAII() {
        pResource = new Resource();
    }
    ~RAII() {
        delete pResource;
    }
private:
    Resource* pResource;
};

void func() {
    RAII obj;    // 在RAII对象构造时申请资源,在RAII对象析构时释放资源
}

int main() {
    func();     // func函数执行结束后,RAII对象会自动释放资源
    return 0;
}

RAII(Resource Acquisition Is Initialization)技术是一种常用的动态内存管理技术,RAII对象用于在其构造函数中申请资源,在其析构函数中释放资源。使用RAII技术可以避免动态内存管理错误和内存泄漏。

五、使用容器管理动态内存

#include 

class Person {
public:
    Person() {
        cout << "Person object created!" << endl;
    }
    ~Person() {
        cout << "Person object destroyed!" << endl;
    }
};

int main() {
    vector
    v;             // 使用vector容器管理Person对象
    v.push_back(Person());        // 在vector中添加Person对象
    return 0;                     // 函数结束时vector容器会自动释放内存
}

   
  

C++标准库提供了多种容器类来管理动态内存,vector是其中一种容器,它可以自动管理内存并为程序员提供简单的语法来添加、删除、访问元素。