c++动态对象

目录

malloc和free动态申请

c++中动态申请

用于数组的 new 和 delete

delete void*问题

使用 new 和 delete 采用相同形式


malloc和free动态申请

在c++中 释放对象时 系统会自动调用析构函数 但在以下代码编译运行后 析构和构造均未调用 所以在c++中不能用malloc和free动态申请空间 而是用new和delete

#include 
#include 
#include 

using namespace std;

class Person
{
    public:
        Person()
        {

            cout << "构造" << endl;
        }
        ~Person()
        {
            cout << "析构" << endl;
        }
};

void test()
{
    Person *p = (Person *)malloc(sizeof(Person));
    free(p);
}
int main()
{
    test();
    return 0;
}

c++中动态申请

类型 * p = new 类型;

delete p;

申请数组:

类型 * p = new 类型[n];

delete []p;

#include 
#include 
#include 

using namespace std;
class person
{
    public:
        person()
        {
            cout << "构造" <

用于数组的 new delete

void test02()
{

        //new时调用有参构造
        person *p = new person(10);

        delete p;

        person *p1 = new person[10]; //注意 new对象的数组时 不能调用有参构造 只能调用无参构造
        delete []p1;
}

delete void*问题

如果对一个 void* 指针执行 delete 操作,这将可能成为一个程序错误,除非指针指向的内容是非常简单的,因为它将不执行析构函数. 以下代码未调用析构函数,导致可用内存减少
void test(){
void * person = new Person( "john" , 20 );
delete person;
}

使用 new delete 采用相同形式

new一个单一的对象时 delete释放单一的对象

new一个数组时 delete释放 [] 这个数组

c++动态对象_第1张图片

你可能感兴趣的:(c++,算法,开发语言)