函数范围/销毁中的C ++指针

时间:2014-11-16 05:11:19

标签: c++

请原谅这个问题,因为它很可能是基本的。此外,我已经广泛搜索了这个,但我发现的只是使用实现的示例,显然会导致内存泄漏。

记下以下伪代码:

void myArbitraryFunc(){
...
// Create Pointer to parent class
MyParentClass* parent = (MyParentClass*)this.getParent();
parent->doSomething(someData);
...
}// Is parent destroyed here?

通过销毁,我不会选择父类,我的意思是指针" parent",我在函数体中声明了它。当它超出范围时会被销毁,对吗?如果是,为什么?如何在没有绑定到原始父级的情况下创建类指针的副本?

1 个答案:

答案 0 :(得分:3)

指针parent被销毁。然而,它指出的是被破坏。

指针本身只是堆栈上的一个变量,当堆栈展开时,当当前作用域结束时,它会消失。它在概念上与此代码没有什么不同:

void myArbitraryFunc() {
    ...
    int parent = 42;
    ....
} // parent goes away

考虑它的方法是指针只是一个数字,该数字是指向的对象的内存地址。

现在在你的例子中,我们假设MyParentClass对象本身是由其他东西创建的,并且由其他东西拥有,因此myArbitraryFunc不负责删除它。

指针实际上只是一个数字,而且是对象的“地址”。将记忆想象成一个巨大的盒子,带有一个数字。你要求系统创建一个对象,它会这样做,并告诉你该对象在方框42中。显然,写'42'的副本并没有对对象本身做任何事情。它只是制作了大量的地址副本。