📜  引用 C++ 中的动态对象(1)

📅  最后修改于: 2023-12-03 15:25:35.438000             🧑  作者: Mango

引用 C++ 中的动态对象

在 C++ 中,动态对象是指通过 new 操作符动态分配内存所创建的对象。这些对象存储在堆内存中,与静态对象和栈对象不同,它们的生命周期可以在程序运行时动态地管理,并且它们可以跨越函数调用和作用域。

动态对象的创建和销毁

为了创建一个动态对象,我们需要使用 new 操作符来动态分配内存。例如,下面的代码创建了一个动态对象 p,类型为 int,并将其初始化为 0:

int* p = new int(0);

当我们不再需要这个动态对象时,需要使用 delete 操作符将其销毁,释放内存。例如:

delete p;

需要注意的是,如果我们尝试删除一个非动态对象,程序将会出现未定义的行为。例如,下面的代码将会导致未定义的行为:

int x = 0;
delete &x;
动态数组

除了创建单个动态对象外,我们还可以使用 new[] 操作符创建动态数组。例如,下面的代码创建了一个包含 10 个 int 类型元素的动态数组:

int* a = new int[10];

与单个动态对象类似,我们在不需要动态数组时,需要使用 delete[] 操作符将其销毁,释放内存。例如:

delete[] a;

需要注意的是,如果我们尝试使用 delete[] 操作符删除单个动态对象,或者使用 delete 操作符删除动态数组,程序将会出现未定义的行为。例如:

int* p = new int(0);
delete[] p;

int* a = new int[10];
delete a;
动态对象的使用

使用动态对象时,我们可以像使用普通对象一样使用它们。例如,下面的代码演示了如何使用动态对象 p 和动态数组 a:

int* p = new int(0);
*p = 100;

int* a = new int[10];
a[0] = 1;
a[1] = 2;
a[2] = 3;

需要注意的是,使用动态对象时,我们需要自己管理其生命周期。如果忘记销毁动态对象,将会导致内存泄漏。例如,下面的代码将会导致内存泄漏:

int* p = new int(0);
p = new int(1); // 忘记销毁 p 所指向的内存

int* a = new int[10];
a = new int[20]; // 忘记销毁 a 所指向的内存
总结

动态对象是 C++ 中非常有用的概念。使用动态对象,我们可以动态地管理对象的生命周期,并且可以创建任意大小的动态数组。但是,需要注意的是,使用动态对象时需要自己管理其生命周期,如果忘记销毁动态对象将会导致内存泄漏。