2011-01-12 96 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

相关问题