C++ 我们应该为std::locale释放分配的资源吗
在第二个参数中,我们使用C++ 我们应该为std::locale释放分配的资源吗,c++,boost,C++,Boost,在第二个参数中,我们使用newboost::gregorian::date\u输入面(“%m/%d/%Y”) 问题:我是否需要关注释放分配的资源 谢谢您否,构造的区域设置拥有方面的所有权,并将在需要时删除它。否。需要实现来释放内存本身(除非您另有指定): 22.3.1.1.2类别locale::facet 对于refs==0,当包含facet的最后一个区域设置对象被销毁时,实现将执行delete static_cast(f)(其中f是指向facet的指针);对于refs==1,实现从不破坏方面
newboost::gregorian::date\u输入面(“%m/%d/%Y”)
问题:我是否需要关注释放分配的资源
谢谢您否,构造的
区域设置
拥有方面
的所有权,并将在需要时删除它。否。需要实现来释放内存本身(除非您另有指定):
22.3.1.1.2类别locale::facet
对于refs==0
,当包含facet的最后一个区域设置对象被销毁时,实现将执行delete static_cast(f)
(其中f
是指向facet的指针);对于refs==1
,实现从不破坏方面
根据C++引用(STD::LoaLead,析构函数):
如果对象是最后一个区域设置对象,该区域设置对象包含它管理其存储的方面对象,则也可能会将其删除facet的生命周期管理似乎是可配置的。C++11 22.3.1.1.2 /他说: 构造函数的
refs
参数用于生命周期管理
-对于refs==0
,当包含facet的最后一个区域设置对象被销毁时,实现将执行delete static_cast(f)
(其中f
是指向facet的指针);对于refs==1
,实现从不破坏方面
因此,在构建facet时,您可以要求使用它的locale
项目取得(共享)所有权,也可以自己保留所有权
您必须查看Boost.Locale文档,以了解Boost语言环境如何初始化其std::Locale::facet
base
const std::locale fmt2(std::locale::classic(),
new boost::gregorian::date_input_facet("%m/%d/%Y"));