gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:42:34 30 4
gpt4 key购买 nike

请原谅这个问题,因为它很可能是初级的。此外,我在谷歌上广泛搜索了这个,但我发现的只是使用明显导致内存泄漏的实现的示例。

注意下面的伪代码:

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

我所说的销毁不是指父类,而是指我在函数体中声明的指针“父类”。当它超出范围时它就会被销毁,对吗?如果是,为什么?我如何创建类指针的拷贝而不将其绑定(bind)到原始父级?

最佳答案

指针 parent 被销毁。然而,它所指向的并未被破坏。

指针本身只是栈上的一个变量,当栈展开时,当当前作用域结束时,指针就会消失。它在概念上与这段代码没有区别:

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

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

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

指针实际上只是一个数字和对象的“地址”。把内存想象成一组巨大的盒子,上面有一个数字。您要求系统创建一个对象,它这样做了,并告诉您该对象在方框 42 中。显然,写入“42”的拷贝不会对对象本身做任何事情。它只是复制了很多地址。

关于函数范围/销毁中的 C++ 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954023/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com