gpt4 book ai didi

c++ - new 和::new 有什么区别

转载 作者:IT老高 更新时间:2023-10-28 12:44:20 24 4
gpt4 key购买 nike

boost 等许多库都使用 ::new::delete

boost::make_shared

中的示例
template< class T, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Args && ... args )
{
boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );

boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );

void * pv = pd->address();

::new( pv ) T( boost::detail::sp_forward<Args>( args )... );
pd->set_initialized();

T * pt2 = static_cast< T* >( pv );

boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
return boost::shared_ptr< T >( pt, pt2 );
}

这是什么意思?为什么要使用 ::new 而不是 new?

最佳答案

C 可以定义自己的operator new (例如,这使您可以为该类拥有自己的分配策略,和/或为其提供一些 Allocator。许多标准 containers 模板接受可选的分配器参数,例如 std::vector 的第二个参数; 另见 std::allocatorthis 示例)。

如果您编写 new C,则将使用该运算符(如果存在)。

如果您编写 ::new C,则使用全局 new

您的示例使用全局 placement new

关于c++ - new 和::new 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48928680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com