小编Hug*_*ite的帖子

Reinterpret_cast vs placement new

通过阅读这篇文章,很明显c ++中的放置新闻用于在预先分配的内存位置上调用类构造函数.

在内存已经初始化的情况下,是新的贴图还是reinterpret_cast更合适?

例如,假设我读取了一个原始字节流,表示来自TCP套接字的成帧消息.我把这个流放入一个framesync并检索一个代表我的类的已知大小的缓冲区,我称之为Message.我知道有两种方法可以继续.

  1. 创建一个带有标志的构造函数,告诉类不要初始化.通过"不初始化"标志在缓冲区上执行new放置.

    Message::Message( bool initialize ) 
    {
        //
        // Initialize if requested
        //
        if( initialize )
        {
            Reset( );
        }
    }
    
    void Message::Reset( void )
    {
       m_member1 = 1;
       m_member2 = 2;
    }
    
    Message* message = new ( buffer ) Message( false );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用reinterpret_cast

    Message* message = reinterpret_cast< Message* > ( buffer ); 
    
    Run Code Online (Sandbox Code Playgroud)

我相信这两者都会产生相同的结果.一个优先于另一个是更正确,更OO,更安全,更容易阅读或更好的风格?

c++ placement-new reinterpret-cast

1
推荐指数
1
解决办法
1404
查看次数

标签 统计

c++ ×1

placement-new ×1

reinterpret-cast ×1