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)
在 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 的方式相同
| 归档时间: |
|
| 查看次数: |
2284 次 |
| 最近记录: |