使用新的位置来创建静态常量指针,指向静态内存缓冲区

Use placement new to create a static const pointer to a static memory buffer

本文关键字:静态 指针 缓冲区 内存 常量 位置 创建      更新时间:2023-10-16

我想初始化一个静态的,恒定的指针,指向类Type MyClass2的对象,该指针将其实例化时存储在类MyClass1中的静态数据缓冲区中。

>

这不起作用:

class MyClass1 {
   public:
       MyClass1()
       {
           _my_class_2_ptr = new (_my_class_2_buf) MyClass2();
       }
   private:
      static MyClass2 *const  _my_class_2_ptr;
      static char *_my_class_2_buf = new char[sizeof(MyClass2)]; 
};

有没有办法完成这样的事情?

当变量静态时,您无法在构造函数中初始化它们。只是没有意义!您想做的是

(在标题中)

class MyClass1 {
   // member    
   public:
      static MyClass2 *const  _my_class_2_ptr;
      static std::aligned_storage_t<sizeof(MyClass2)> _my_class_2_buf; 
};

(在CPP中)

std::aligned_storage_t<sizeof(MyClass2)> MyClass1::_my_class_2_buf;
MyClass2* const MyClass1::_my_class_2_ptr = new (&MyClass1::_my_class_2_buf) MyClass2;

您可以在类外移动static成员变量的定义和Intialization。

class MyClass1 {
   public:
       MyClass1() {}
   private:
      static MyClass2 *const  _my_class_2_ptr;
      static char *_my_class_2_buf; 
};
char *MyClass2::_my_class_2_buf = new char[sizeof(MyClass2)]; 
MyClass2 *const  MyClass1::_my_class_2_ptr = new (_my_class_2_buf) MyClass2();