const std::locale fmt2(std::locale::classic(),
new boost::gregorian::date_input_facet("%m/%d/%Y"));
在第二个参数中,我们使用new boost::gregorian::date_input_facet("%m/%d/%Y")
。
问题:我是否需要关注释放分配的资源?
谢谢
答案 0 :(得分:3)
似乎可以配置facet的生命周期管理。 C ++ 11 22.3.1.1.2 / 2说:
构造函数的
refs
参数用于生命周期管理。- 对于
refs == 0
,当包含构面的最后一个区域设置对象被销毁时,实现执行delete static_cast<locale::facet*>(f)
(其中f
是指向构面的指针);对于refs == 1
,实现永远不会破坏方面。
因此,当您构建构面时,您可以要求locale
使用它的对象获取(共享)所有权,或者自己保留所有权。
您必须查看Boost.Locale文档,了解Boost语言环境如何初始化其std::locale::facet
基础。
答案 1 :(得分:2)
没有。实现需要释放内存本身(除非您另行指定):
22.3.1.1.2班级
locale::facet
对于
refs == 0
,当包含构面的最后一个区域设置对象被销毁时,实现执行delete static_cast<locale::facet*>(f)
(其中f
是指向构面的指针);对于refs == 1
,实现永远不会破坏方面。
答案 2 :(得分:1)
不,构建的locale
会假定Facet
的所有权,并会在需要时将其删除。
答案 3 :(得分:1)
根据C ++ References(std :: locale,析构函数):
如果对象是包含为其管理存储的构面对象的最后一个区域设置对象,则也可以将其删除。