Har*_*gar 11 c++ delete-operator dangling-pointer
我在最近的一次采访中被问到这个问题,基本上是编写了一个函数来结合free的功能和赋值null.我用以下方式回答:
void main()
{
int *ptr;
ptr = new int;
ptr = newdelete(ptr);
}
(int*) newdelete (int *ptr)
{
delete(ptr);
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
因此在执行之后,当我从函数返回时,ptr本地main将保持空值newdelete.如果我刚刚NULL在newdelete函数中分配,则ptr本地newdelete将被取消,而不是ptr本地的main.
我认为我的解决方案是正确的,面试官也接受了.但是,他期待着其他一些答案.他坚持要求我不NULL从函数返回并仍然达到预期的效果.
有没有办法实现这一目标?我能想到的只是传递另一个参数,它是指向ptr本地指针的指针main,但我不明白为什么它比我做的更好!
Sig*_*erm 36
有什么办法可以实现吗?
template <typename T> void safeDelete(T*& p){
delete p;
p = 0;
}
int main(int argc, char** arv){
int * i = new int;
safeDelete(i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我猜他期待的是:
void reset(int*& ptr)
{
delete(ptr);
ptr = NULL;
}
Run Code Online (Sandbox Code Playgroud)
一个更清洁的解决方案就是使用a boost::shared_ptr<>并简单地调用ptr.reset().但是,我想这不是一个选择.
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |