下面的delete語句是代碼冗餘。我想出了在多個if語句中相同的操作,如何減少代碼冗餘
int *a = new int[100]
if (!doSomething1(a))
delete[] a
return
if (!doSomething2(a))
delete[] a
return
if (!doSomething3(a))
delete[] a
return
return
一種選擇是:
if(doSomething1(a) || doSomething2(a) || doSomething3(a))
;
delete[] a;
return;
但它不能在情況),適合在這裏我要添加指定doSomething1(指示,例如
if(!doSomething1(a))
foo;
delete[] a;
return;
if(!doSomething2(a))
delete[] a;
return;
我被告知至少有5種方法可以減少這種代碼冗餘。那麼有什麼建議?
更新,還有一個問題: 同樣的問題,讓我們來限制域僅C,注意流程邏輯的變化。
char *a = (char*)malloc(100*sizeof(char));
if(doSomething1(a))
foo;
free(a)
return;
if(doSomething2(a))
free(a)
return;
if(doSomething3(a))
free(a);
return;
free(a);
return
您的觀點是有效的,但我認爲他/她的問題是關於控制結構,而不是內存分配。我認爲內存分配對於任何代碼都只是一個通用的替身。 –
Yesss !!!例外,所以* nobody *將看到代碼背後的扭曲控制流。 Dijkstra和你的「goto被認爲是有害的」,我們可以做得更多,更糟!拿着它!! **(邪惡的笑聲迴盪)** – vonbrand
@IronSavior:答案在一般情況下是一樣的:如果在離開當前範圍時必須做某事,請在範圍自動對象的析構函數中執行。 –