【发布时间】:2019-12-04 23:35:20
【问题描述】:
如果之前有人问过这个问题,我很抱歉。我搜索了互联网,但找不到任何明确的答案。
这是问题:
假设我有一个名为 Object 的公共类,它有 2 个属性。一个是int attr1,另一个是char * attr2。构造函数是(我有一个头文件):
Object::Object(int param1, char * param2)
{
attr1=param1;
attr2 = new char[strlen(param2)+1]; // I understand that by doing this the values are stored in the heap
strcpy(attr2, param2);
}
我知道在 Object 类的析构函数中我需要写delete [] attr2。
在另一个文件 main.cpp 中,我以这种方式创建了一个新对象:
char * name = "Aname";
Object myObject = new Object(3, name);
据我了解,每当使用new 时,该值都会存储在堆中。因此,delete 是必要的,以避免内存泄漏。
这里我使用了new 操作符来创建一个对象。因此 myObject 是指向存储在堆中的 Object 的指针。当我不再需要它时,我需要这样做:delete myObject。
所以这是我的问题:由于 myObject 指向的对象存储在堆中,这是否意味着它的所有属性都存储在堆中(包括attr1,它只是一个 int)?
如果是这样,为什么我也不必释放它(意味着在析构函数中使用运算符delete)?
感谢您的帮助!
注意:英语不是我的母语,如有错误请见谅。
【问题讨论】:
-
不相关:我知道这样做会将值存储在堆中最好使用术语动态内存而不是堆。堆是动态内存的常见实现,但 C++ 实现可以改为使用仙尘作为动态内存,只要实现者可以使其工作。
标签: c++ memory heap-memory new-operator delete-operator