请原谅这个问题,因为它很可能是基本的。此外,我已经广泛搜索了这个,但我发现的只是使用实现的示例,显然会导致内存泄漏。
记下以下伪代码:
void myArbitraryFunc(){
...
// Create Pointer to parent class
MyParentClass* parent = (MyParentClass*)this.getParent();
parent->doSomething(someData);
...
}// Is parent destroyed here?
通过销毁,我不会选择父类,我的意思是指针" parent",我在函数体中声明了它。当它超出范围时会被销毁,对吗?如果是,为什么?如何在没有绑定到原始父级的情况下创建类指针的副本?
答案 0 :(得分:3)
指针parent
被销毁。然而,它指出的是不被破坏。
指针本身只是堆栈上的一个变量,当堆栈展开时,当当前作用域结束时,它会消失。它在概念上与此代码没有什么不同:
void myArbitraryFunc() {
...
int parent = 42;
....
} // parent goes away
考虑它的方法是指针只是一个数字,该数字是指向的对象的内存地址。
现在在你的例子中,我们假设MyParentClass对象本身是由其他东西创建的,并且由其他东西拥有,因此myArbitraryFunc
不负责删除它。
指针实际上只是一个数字,而且是对象的“地址”。将记忆想象成一个巨大的盒子,带有一个数字。你要求系统创建一个对象,它会这样做,并告诉你该对象在方框42中。显然,写'42'的副本并没有对对象本身做任何事情。它只是制作了大量的地址副本。