[英]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.