我编写了一个小软件,并希望在堆上创建一个新对象。因此,在类成员函数中,我具有我是否必须删除此对象? (如果我不打算被删除)
void gShop::CreateCustomer(int type, int number)
{
vSlot[number] = new gCustopmer(type);
vSlot[number]->itsContactToShop=itsShopNumber;
vSlot[number]->itsNumber=number;
}
其中vSlot是指向客户对象的指针向量。我有一个(此处略)类gShop,本质:
class gShop : public gBranch
{
public:
gShop(): vSlot(100){}
~gShop(){}
std::vector <gCustomer*> vSlot;
...
}
,并在主我所说的成员函数来创建新的客户..
vShop[0].CreateCustomer(TYPE_M20, 1);
vShop[0].CreateCustomer(TYPE_F40, **2**);//EDIT:typo previously here. I intend to create customers by reading a file later on.
std::cout<< "1" << vShop[0].vSlot[1]->itsTypeString << std::endl;
std::cout<< "2" << vShop[0].vSlot[2]->itsTypeString << std::endl;
我知道了我与创造“新的“堆”上的两个对象(如果我处理术语权 - 抱歉,我对编程没有正规教育颇为陌生),并且我还有两个指向存储在对象商店[0]中的向量中的对象。
我的问题是我听到说每个新的都有一个删除。我必须在哪里删除这个对象?实际上我并没有计划删除程序中创建的任何商店或客户对象。
其次,这段代码到目前为止还没有引起内存泄漏?我有点担心,我在一个成员函数类中创建了新对象,所以我应该尝试在析构函数中实现delete到gShop并将指针设置为NULL - 在理论上我应该想要删除shop [0] ?
非常感谢。
很酷。所以你的意思是像vSlot(100,NULL)而不是vSlot(100)?然后,我替换它检查与if语句,如果它的NULL,如你所示? – user2856452
没有矢量已经用空值初始化它。但是当你有原始的poiters时,你应该用null(它写好的方法)来初始化它们。对不起我错误(和正确答案)在你创建函数。你检查指针是否存在空对象。 – conf1ict
当'CreateCustomer()'删除一个现有的项目时,如果后续的'new'产生一个异常,你应该将该向量的那个空置空。 –