我们应该释放std :: locale的已分配资源吗?

时间:2013-12-05 20:22:38

标签: c++ boost

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")

问题:我是否需要关注释放分配的资源?

谢谢

4 个答案:

答案 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,析构函数):

  

如果对象是包含为其管理存储的构面对象的最后一个区域设置对象,则也可以将其删除。