[英]How to delete a pointer to a pointer?
在C ++中,如果将指针传递给方法指针,是否首先删除引用的指针? 你需要在方法中清理它吗? 我正在检查任务管理器中的内存,它正在泄漏!
谢谢!!
您删除指向指针的指针,如下所示:
int** p = 0;
p = new int*; // create first pointee
*p = new int; // create 2nd pointee
**p = 0; // assign 2nd pointee
// free everything
delete *p;
delete p;
删除传递给方法的指针对我来说似乎很不寻常。 但无论如何:
void freeme(int **p) {
delete *p;
*p = 0;
}
int main() {
int *a = new int;
*a = 3;
freeme(&a);
// a == 0 now
}
“指向指针的指针”?
如果例如你有:
MyClass * obj_ptr = new Myclass();
MyClass ** obj_ptr_ptr = &obj_ptr;
//then if you want to clean do :
delete (*obj_ptr_ptr);//to clean the class instance.
为什么需要清理指针...如果您只使用malloc ...或任何其他动态(堆)分配。 但是你可能在堆栈上分配了指针,所以你不需要清理它。 在他的范围的末尾,清理范围中使用的堆栈上的内存。
你应该从底部开始,然后上去。 否则,您将失去对引用链下方数据引用的引用!
1.通过解除引用两次删除您获得的数据,即*myPtrToPtr
2.通过解除引用一次删除所获得的数据(指针),即myPtrToPtr
但是,当然,只有在指针和它指向的东西都被动态分配时才这样做。
我同意评论者的意见......更具体的内容会对我们提供一些背景信息。
如果它正在泄漏,则必须先删除引用的指针,然后删除引用指针。 删除引用指针后,访问引用指针的存储将是未定义的行为,因为您刚刚销毁了该对象。
在考虑销毁之前,首先需要定义谁是每个指针的所有者。
如果你必须销毁一个指向你拥有的指针的指针,那么你需要先破坏引用的指针,或者在销毁另一个指针之前暂时保存它的值。
但你应该考虑使用像valgrind / purify或等效的内存检查工具,并在做出疯狂猜测之前考虑谁拥有什么(即:谁应该摧毁谁)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.