【问题标题】:How to delete a pointer but not delete the object which the pointer point to? C++ [closed]如何删除指针但不删除指针指向的对象? C++ [关闭]
【发布时间】:2013-09-09 17:41:16
【问题描述】:

如何在 C++ 中删除指针但不删除指针指向的对象? 提前致谢。

【问题讨论】:

  • 删除指针是什么意思?您不会删除指针(除非您动态分配它们)而是它们指向的对象。
  • 只是等待指针超出范围?
  • 您是否为该指针分配了内存,与它指向的对象的内存分开?你的问题没有多大意义。
  • 删除指针涉及调用类型的析构函数并释放内存。根据您的实现,您可以简单地调用 free() 或执行 'delete (void*)p;'
  • @edwinc 虽然在技术上是正确的,但自动生成的指针类型析构函数几乎是无操作的...int **pp = new (int *); delete pp; 除了调用newdelete 之外并没有做太多事情。 ..

标签: c++ pointers


【解决方案1】:

指针将超出范围。您不需要“删除”指针。您只需要释放指针指向的内存。

【讨论】:

  • ..除非您不想这样做,因为还有另一个指针副本仍然持有引用。
【解决方案2】:

您永远不会删除显式指针(除非您动态分配它们),它是在堆栈上创建并以处理通常堆栈变量生命周期的方式删除

int* avoid_leaker;
{
int* i_ptr = new int(7);
avoid_leaker = i_ptr; 
} // here i_ptr is gone but new int created on heap remains!
  // we assigned it to avoid_leaker to avoid  leak

http://en.wikipedia.org/wiki/Memory_leak

【讨论】:

  • 这不完全是删除。它是一个自动变量,而不是动态分配的内存
  • 你永远不会删除显式指针,它是在堆栈上创建并以通常处理堆栈变量生命周期的方式删除
  • 我相信这个答案的意思是任意范围解析运算符控制静态声明变量的生命周期,从而控制 i_prt 的生命周期。一个最终正确的答案,但没有解决 OP 对 delete 真正在做什么的误解。
猜你喜欢
  • 2011-05-02
  • 2010-09-08
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2015-08-07
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多