我使用的常见模式是:
const string& GetConstString() {
static const auto* my_string = new string("useful const string");
return *my_string;
}
[这不是泄漏!见this video]
这解决了许多终身问题。 string
可以替换为任何具有非常重要的dtor的类型。
如果你的类型有默认的ctor&琐碎的dtor,你可以简单地做
const MyType& GetConstMyType() {
static MyType my_type;
return my_type;
}
我正在使用一个有默认ctor和普通dtor的课程。我想知道这个类是默认值还是值初始化。事实证明,it doesn't really matter for class-types。所以这成了一个学术问题[例如,如果你有这个类的数组]。
但它是默认值还是值初始化?
答案 0 :(得分:6)
我没有看到指针解决的生命周期问题。事实上,它增加了一个:内存泄漏。
你 应该使用第二个版本,它将(最终)初始化,就像没有static
关键字一样。
const string& GetConstString()
{
// Initialised on first use; destroyed properly on program exit
static const std::string my_string("useful const string");
return my_string;
}
这具有不是双动态分配的额外好处。
更一般地说,使用哪种特定类型的初始化取决于您在代码中编写的内容。
答案 1 :(得分:0)
根据“轨道中的轻度赛跑”的评论,答案是:
静态对象将使用与非静态对象完全相同的规则初始化默认值/值。