很抱歉,以前是否有人问过这个问题。我搜索了互联网,但找不到明确的答案。
问题出在这里:
假设我有一个名为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
)?
谢谢您的帮助!
注意:英语不是我的母语,对不起。