这是ä¸å¥½çš„åšæ³•å—? C ++

时间:2011-01-12 05:51:24

标签: c++

Class1 myclass(someparameter);

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

我在文件范围内有一个å˜é‡ã€‚

我真的ä¸çŸ¥é“怎么说出我的问题。但基本上我正在å¤åˆ¶ä¸€ä¸ªç±»ï¼Œè¿™æ®µä»£ç çœ‹èµ·æ¥å¾ˆæ—¶é«¦ã€‚这样åšæœ‰ä»€ä¹ˆåŽæžœå—?我应该使用new / deleteå—?我能想到的一个潜在问题是,如果类包å«æŒ‡é’ˆï¼ˆä½†é‚£å¯ä»¥é€šè¿‡åˆ›å»ºå¤åˆ¶æž„造函数æ¥è§£å†³ï¼‰

3 个答案:

答案 0 :(得分:2)

我认为全局å˜é‡é€šå¸¸æ˜¯ä¸å—欢迎的。但这并ä¸æ„味ç€å®ƒä»¬æ˜¯éžæ³•çš„或“å的风格â€ã€‚在这ç§ç‰¹æ®Šæƒ…况下,我肯定会é¿å…使用全局å˜é‡......

答案 1 :(得分:1)

å‡è®¾ä½ çš„课程å¯ä»¥æ­£ç¡®å¤åˆ¶ï¼Œé‚£ä¹ˆæˆ‘没有看到任何内在错误。但它并ä¸æ˜¯é‚£ä¹ˆæœ‰æ•ˆï¼Œå› ä¸ºmyclass实际上被åˆå§‹åŒ–了两次:一次声明它,å†æ¬¡æŒ‡å®šå¦ä¸€ä¸ªå®žä¾‹ã€‚

如果这是你的逻辑è¦æ±‚,那没关系。å¦åˆ™ï¼Œæ‚¨å¯ä»¥æ高代ç æ•ˆçŽ‡ã€‚

答案 2 :(得分:0)

你所åšçš„事情没有错,虽然目å‰å°šä¸æ¸…楚这是什么æ„æ€ã€‚有时这ç§äº‹æƒ…是有æ¡ä»¶çš„ - 例如,如果命令行å‚数指定å˜é‡çš„替代值。您ä¸éœ€è¦ä½¿ç”¨newå’Œdelete ...在这ç§æƒ…况下,您è¦æ±‚编译器创建一个临时对象,然åŽå°†å…¶å¤åˆ¶åˆ°å…¨å±€å˜é‡ä¸­ï¼ˆä½¿ç”¨å…¶operator=),然åŽä¸´æ—¶å°†é”€æ¯ã€‚效率通常至少比直接构造具有所需值的å˜é‡æ›´å·®ï¼Œä½†åœ¨è¿‡æ—©æˆ–ä¸å¿…è¦çš„优化中没有任何æ„义。

为了进行比较,请考虑:

std::string sep = "\n";

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

这或多或少都是一样的,尽管这里std::string临时的显å¼æž„造是å¯é€‰çš„,因为该类碰巧有operator=(const char*)。一切都好。