初始化对象的静态数组C++

hap*_*man 0 c++ static initialization

如何为以下类声明“数据库”对象数组(无动态内存)?

class DataBase
{
 public: 
      DataBase(int code);
 private:
      Database();
      Database(const Database &);
      Database &operator=(const Database &);
 };
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 5

在 C++17 及更高版本中,要么像这样:

Database a[] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

或者使用显式构造函数:

Database a[] = { Database(1), Database(2), Database(3) };
Run Code Online (Sandbox Code Playgroud)

在 C++17 之前,你可以尝试这样的事情:

#include <type_traits>

std::aligned_storage<3 * sizeof(DataBase), alignof(DataBase)>::type db_storage;
DataBase* db_ptr = reinterpret_cast<DataBase*>(&db_storage);

new (db_ptr + 0) DataBase(1);
new (db_ptr + 1) DataBase(2);
new (db_ptr + 2) DataBase(3);
Run Code Online (Sandbox Code Playgroud)

现在您可以使用db_ptr[0]etc。根据 C++11* 中的对象生存期和指针算术规则,这并不完全合法,但它在实践中有效。

*) 与 C++11 中无法实现 std::vector 的方式相同