我想初始化一个指向类类型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)];
};
有没有办法完成这样的事情?
答案 0 :(得分:4)
当变量是静态的时,您无法在构造函数中初始化它们。它没有意义!你想做的是像
(标题中)
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;
答案 1 :(得分:2)
您可以将static
成员变量的定义和初始化移到类外。
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();