2011-01-12 147 views
3
Class1 myclass(someparameter); 

int main(int argc, char* argv[]) 
{ 
    myclass = Class1(anotherparameter); 
} 

我有一個文件範圍的變量。這是不好的做法嗎? C++

我真的不知道如何說出我的問題。但基本上我正在複製一個類,這段代碼看起來很時髦。這樣做有什麼後果嗎?我應該用new/delete代替嗎?我能想到的一個潛在的問題是如果類包含指針(但是可以通過創建一個拷貝構造函數來解決這個問題)

+0

是的,c + +是不好的做法...開玩笑,只是開玩笑。放鬆一下,我的朋友。 – JimDaniel 2011-01-13 01:02:56

回答

1

假設你的班級可以正確複製,那麼我不會看到任何內在的錯誤。但是這並不是那麼有效,因爲myclass實際上被初始化了兩次:一次是聲明它的地方,另一次是將另一個實例分配給它的地方。

如果這就是你的邏輯要求,那沒關係。否則,你可以使你的代碼更有效率。

0

你做了什麼沒有問題,雖然目前還不清楚它的意義。有時這種事情有條件地完成 - 例如,如果命令行參數指定了變量的替代值。您不需要使用new並刪除...在這種情況下,您要求編譯器創建一個臨時對象,然後將其複製到全局變量中(使用operator=),則臨時對象將被銷燬。與直接直接構建具有所需值的變量相比,效率通常至少要差一些,但不要過早或不必要的優化。

爲了比較,考慮:

std::string sep = "\n"; 

int main(...) 
{ 
    if (...) 
     sep = std::string("\r\n"); 
} 

這是做或多或少同樣的事情,雖然這裏std::string臨時的明確建設是可選的,因爲該類恰好有一個operator=(const char*)。都好。

2

我想說全局變量通常是不希望的。但這並不意味着他們是非法的或'壞風格'。我肯定會避免在這種情況下使用全局變量...

+0

哦,他們**是不好的風格,絕對!你爲什麼認爲「單身」反模式會受到如此多的憎恨;)? – 2011-01-12 07:35:45

相關問題