假设我们有以下情况:
它可以写成:
std::string mode; //this cost us calling the constructor of std::string
if(time==Morning){ // a real code should be here
mood="Good"//re assign the string
}
else{
mood="bad"//re assign the string
}
std::cout << mood;假设它不是std::string,它是一个非常大的对象。声明“模式”并无缘无故地调用构造函数不是太奢侈了吗?使用原始指针是解决方案吗?这里的最佳做法是什么?谢谢
发布于 2015-08-28 12:40:37
发布于 2015-08-28 13:52:52
我会考虑将逻辑放入一个单独的函数中。这有助于保持函数的小和简单。
std::string moodAtTime(Time time)
{
if(time==Morning)
{ // a real code should be here
return "Good";
}
else
{
return "bad";
}
}
std::string mood = moodAtTime(t);这减少了函数的长度,并将代码拆分为执行简单问题的小单元。
如果它仅用于初始化,则可以使用lambda来完成此操作,而不需要指定函数:
std::string mood = [](Time t)
{
if(t==Morning)
{
return "Good";
}
else
{
return "bad";
}
}(now);发布于 2015-08-28 12:43:27
如果您输入特定范围的分配时间,成本会很高,是的,它可能会变得非常昂贵(取决于范围内发生了什么)。
解决办法是保留一个全局变量,或者更广泛地使用这样的对象池(对象池/内存池被广泛用于这类目的,特别是在小型和非常小的对象的情况下)。
所以,用代码来解释
// scope that is entered allot, like 100k times per second
{
std::string temp;
...
// magic happens
...
}快速解
{
static std::string g_uniqueNamed_temp_string;
...
// magic happens
...
}优雅的解决方案
编辑:切换到原始指针以避免复制
{
std::string* tempString = StringPool::GetAPreallocatedString();
...
// magic happens
...
}https://stackoverflow.com/questions/32271125
复制相似问题