簡體   English   中英

這是不好的做法嗎? C ++

[英]Is this bad practice? C++

Class1 myclass(someparameter);

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

我在文件范圍有一個變量。

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

我會說全局變量通常是不受歡迎的。 但這並不意味着它們是非法的或“壞的風格”。 在這種特殊情況下,我肯定會避免使用全局變量...

假設你的課程可以正確復制,那么我沒有看到任何內在錯誤。 但是,由於myclass實際上被初始化了兩次,所以效率並不是那么高效:一次聲明它,再次指定另一個實例。

如果這是你的邏輯需要的,那沒關系。 否則,您可以提高代碼的效率。

你所做的事情沒有錯,雖然目前尚不清楚這一點是什么。 有時這種事情是有條件的 - 例如,如果命令行參數指定變量的替代值。 您不需要使用new和delete ...在這種情況下,您要求編譯器創建一個臨時對象,然后將其復制到全局變量中(使用其operator= ),然后臨時對象將被銷毀。 效率通常至少比直接構造具有期望值的變量更差,但在過早或不必要的優化中沒有意義。

為了比較,請考慮:

std::string sep = "\n";

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

這或多或少都是一樣的,盡管這里std::string臨時的顯式構造是可選的,因為該類碰巧有一個operator=(const char*) 都好。

暫無
暫無

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

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