Closed. This question needs to be more
focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过
editing this post专注于一个问题。
5年前关闭。
我有一个RegisterPage函数,它带有3个参数:页面名称,页面地址和布尔值。函数声明看起来像
bool RegisterPage(char * PageName,Page * PagePtr,bool isOwner);
如果用户正在动态创建页面,则他将true传递为bool参数,而在静态创建页面时则将false传递为bool值。用户足够聪明,知道他应该通过什么。有一个数组用于保存此值,例如
struct PageManagerData
{
PageManagerData()
{
name[0]='\0';
storePagePtr = NULL;
owner = false;
}
char name[20];
bool owner;
IPage* storePagePtr;
};
PageManagerData _Pages[100]
现在在每个具有isOwner为true的_Pages中都应删除
我有一个叫做clear的函数,类似
void pageManager::clear(void)
{
for(int i = 0; i<100; i++)
{
if((_Pages[i].owner)==true)
{
//delete the _Pages[i] object here
delete _Pages[i];//didn't work
delete _Pages[i].name;
delete _Pages[i].storePagePtr;
delete _Pages[i].owner//shows error(must have pointer type)
}
}
调用以下函数时,我应该怎么做才能删除对象
void pageManager::~pageManager
{
clear();
}
如果bool isOwner为true,则使用new动态分配内存。
简单的规则是:如果调用new
,则应该有一个对应的delete
。
我在您发布的代码中没有看到一个new
,因此不应有一个delete
。
由于struct PageManagerData
具有构造函数,因此它可能也应该具有析构函数。
如果用户正在动态创建页面,那么他将布尔值传递为true
论点,他是静态创建的,然后他将false传递为bool
值。
这将不可避免地失败,因为有人迟早会使用静态分配的页面来调用它,而稍后将其更改为动态分配,而忘记了更改所有者。
创建一个带有引用的函数,另一个带有指针的函数。如果传入了指针,则假定它是动态分配的,并将owner
设置为true
。如果是参考,请获取它的地址并将其与false
一起存储为owner
。那不能保证代码是正确的,但是可以提供更好的机会。
我是一名优秀的程序员,十分优秀!