繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM