[英]Return value after delete this;
假設我有一個A級
class A {
public:
A(){};
~A(){};
bool foo(int);
};
bool A::foo(int i){
if(i==10){
delete this;
return true;
}
return false;
}
int main(){
A *pnt = new A();
if(pnt->foo(10)){
cout<<"deleted with foo"<<endl;
}
else{
delete pnt;
}
return 1;
}
這是好的還是未定義的行為,foo將返回true?
我問在“ delete this;
”之后會員函數會發生什么。
我搜索的草案對現行標准,也讀出了問題的意見和常見問題解答引用。
我找不到任何元素說這段代碼應該導致Undefined Behavior。
標准說:
this
在上面的代碼中是正確的 由於代碼不在對象的已分配部分中,並且在delete this
之后,代碼僅使用常量值true
,因此代碼沒有理由導致UB。 常見問題(和答案給裁判ED問題)清楚地表明, delete this
是有效的,地道的C ++。
所以沒有理由不應該執行return true
。
話雖如此,對於delete this
任何其他用法,程序員必須確保僅在分配有new的對象上使用它,因為如果不是它確實是UB。
據我所知,'刪除這個'使得this指針指向的對象無效。
因此,使用任何成員變量都是未定義的; 並且你不能調用虛擬(多態)函數(因為你不再有vtable)。 但是,您可以執行任何其他需要包含的內容(如在您的情況下)返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.