簡體   English   中英

函數范圍/銷毀中的C ++指針

[英]C++ Pointer in function Scope/Destruction

請原諒這個問題,因為它可能是基本的。 此外,我已經廣泛搜索了這個,但我發現的只是使用實現的示例,顯然會導致內存泄漏。

記下以下偽代碼:

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

通過銷毀我不會使用父類,我的意思是指針“parent”,我在函數體中聲明了它。 當它超出范圍時會被銷毀,對嗎? 如果是,為什么? 如果沒有綁定到原始父級,我將如何創建類指針的副本?

指針parent被銷毀。 然而,它指出的並沒有被破壞。

指針本身只是堆棧上的一個變量,當堆棧展開時,當當前作用域結束時,它就會消失。 它在概念上與此代碼沒有什么不同:

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

考慮它的方法是指針只是一個數字,該數字是指向的對象的內存地址。

現在在您的示例中,我們假設MyParentClass對象本身是由其他東西創建的,並且由其他東西擁有,因此myArbitraryFunc不負責刪除它。

指針實際上只是一個數字,而對象的“地址”。 將記憶想象成一個巨大的盒子,帶有一個數字。 你要求系統創建一個對象,它會這樣做,並告訴你該對象在方框42中。顯然,寫'42'的副本並沒有對對象本身做任何事情。 它只是制作了大量的地址副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM