这是不好的做法吗?C++

4
Class1 myclass(someparameter);

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

我有一个文件作用域的变量。

我不太知道如何表达我的问题。但基本上我正在复制一个类,这段代码看起来相当奇怪。这样做有什么后果吗?我应该使用 new / delete 吗?我能想到的一个潜在问题是如果类包含指针(但这可以通过创建一个复制构造函数来解决)。


是的,C++是个坏习惯......开玩笑的,只是开玩笑。放轻松,我的朋友。 - JimDaniel
3个回答

2

我认为全局变量通常是不受欢迎的。虽然这并不意味着它们是非法的或者“不好的风格”。在这种情况下,我肯定会避免使用全局变量...


哦,它们的风格确实很糟糕!你认为“单例”反模式为什么会受到如此多的批评呢? ;) - Matthieu M.
@Matthieu M. 我试图避免使用激烈的措辞 :) - a1ex07

1

假设您的类可以正确复制,那么我认为这没有任何本质上的问题。但是它并不是非常高效,因为myclass实际上被初始化了两次:一次在声明时,另一次在将另一个实例分配给它时。

如果这是您的逻辑所需的,那就没问题。否则,您可以使您的代码更加高效。


0

你所做的没有问题,但目的不是很清楚。有时候这种事情是有条件的 - 例如,如果命令行参数指定了变量的替代值。在这种情况下,您不需要使用 new 和 delete...因为这样会让编译器创建一个临时对象,然后将其复制到全局变量中(使用其 operator=),然后销毁临时对象。效率通常至少比直接构造具有所需值的变量差一点,但是过早或不必要的优化没有意义。

作为比较,请考虑:

std::string sep = "\n";

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

这个做的事情或多或少是一样的,尽管在这里显式构造一个std::string临时对象是可选的,因为该类恰好有一个operator=(const char*)。一切都很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接