Class1 myclass(someparameter);
int main(int argc, char* argv[])
{
myclass = Class1(anotherparameter);
}
我有一个文件作用域的变量。
我不太知道如何表达我的问题。但基本上我正在复制一个类,这段代码看起来相当奇怪。这样做有什么后果吗?我应该使用 new
/ delete
吗?我能想到的一个潜在问题是如果类包含指针(但这可以通过创建一个复制构造函数来解决)。
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*)
。一切都很好。