簡體   English   中英

有關已刪除對象的C ++參考

[英]C++ reference on deleted objects

我正在學習C ++(來自iOS),並且想了解指針/參考用法。

在刪除對象上的引用時是否正確? 還是引用的變量也會被刪除?

例:

Class Foo {
}

Class Faa{
   asyncCall(&Foo)
}

1。

// ...
Foo *foo = new Foo();
faa->(asyncCall(&foo);
delete foo;
// ...

2。

// ...
Foo *foo = new Foo();
Foo& refFoo = foo;
delete foo;

// do something with refFoo

由於您的代碼示例是亂碼,因此我將擺出自己的代碼:

Foo* foo = new Foo();
Foo& ref = *foo;
delete foo;

// Use refFoo

這不好。 引用只是指在其他地方創建的對象。 在此示例中, *fooref是完全相同的對象。 一旦銷毀該對象,就執行delete foo; ref懸而未決。 它是指不再存在的對象。 訪問它會導致不確定的行為。

C ++中的引用與Java,C#或其他垃圾收集語言中的引用不同:出於大多數實際目的,您可以將C ++引用視為不需要取消引用*的指針。 創建對對象的引用不會延長其壽命。 這就是為什么通過引用訪問已刪除對象比通過第二個指針訪問已刪除對象不再可行:這是未定義的行為。


*不過, 引用不是指針

除了您的樣本甚至不接近正確的C ++並且沒有一個可以編譯的事實之外,對刪除的對象進行操作永遠也不是一件容易的事。

&可以表示一個引用(如聲明asyncCall(&Foo) -您錯過了返回值和參數的數據類型),也可以采用其地址(如asyncCall(&foo) )。

擁有一些幾乎類似於C ++的代碼並更好地進行編譯也將有所幫助。

當您刪除對象時,它就消失了。 引用該對象(指針,引用)的所有內容均無效。

暫無
暫無

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

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