在堆和堆栈中创建对象的差异
Difference in creating an object in the heap and in the stack
假设我有以下两个类:
#ifndef CLASS1_H
#define CLASS1_H
#include <QDebug>
class Class1
{
public:
Class1(){}
void printName()
{
qDebug() << "Class1";
}
};
#endif // CLASS1_H
和
#ifndef CLASS2_H
#define CLASS2_H
#include "class1.h"
class Class2
{
public:
Class2(Class1 *pointerToClass1)
{
this->pointerToClass1 = pointerToClass1;
}
void doSomething()
{
this->pointerToClass1->printName();
}
private:
Class1 *pointerToClass1;
};
#endif // CLASS2_H
和主要功能看起来像这样:
#include <QCoreApplication>
#include "class1.h"
#include "class2.h"
void func1()
{
Class1 class1;
Class2 *class2_1 = new Class2(&class1);
Class2 class2_2(&class1);
class2_1->doSomething();
class2_2.doSomething();
delete class2_1;
class2_1 = NULL;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
func1();
return a.exec();
}
在堆中创建对象的主要区别(例如Class2 *class2_1 = new Class2(&class1);
(,只需在堆栈上创建对象(例如Class2 class2_2(&class1);
(?
因此,使用一个或另一个?
带有指针和新关键字,您可以在堆上创建对象,然后将其分配给堆栈上的指针>。因此,当指针脱离范围并从堆栈中"弹出"时,您将无法再访问对象了。(内存泄漏(如果在堆栈上创建对象,则不必担心释放内存(在这种情况下,删除指针指向的对象(
为了正常使用,我会选择堆栈版本。设计模式有一些老式的实现,您可以在其中开始使用继承,并在那里使用PTR。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 如何在构建对象堆栈时解决转换错误?
- 堆还是堆栈用于创建对象?
- 在堆和堆栈中创建对象的差异
- 在堆栈上创建对象的不同方法
- C++:如何在循环中的堆栈上创建对象
- 在堆栈中创建对象时,即使代码覆盖率为100%,函数覆盖率也较小
- 如何使用在另一个类的构造函数中的堆栈上接受参数的构造函数创建对象
- 在堆栈上创建对象
- 在堆栈上创建对象时分配的内存在哪里
- 在堆栈/堆上创建对象
- 何时在堆与堆栈中创建对象
- 将引用分配给新创建的堆栈分配对象时会发生什么
- 在堆栈/堆上创建对象
- 在堆栈上创建对象矢量?(c++)