Placement New (C++をもう一度)
[履歴] [最終更新] (2014/12/28 14:06:32)
最近の投稿
注目の記事

サンプルコード

予め確保しておいたメモリ領域を new で指定してオブジェクトを生成できます。この場合の new を placement new とよびます。

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {
        cout << "MyClass" << endl;
    }
    ~MyClass() {
        cout << "~MyClass" << endl;
    }

public:
    void Say() {
        cout << "Say" << endl;
    }
};

const int SIZE = 2;
char* reserved = new char[SIZE * sizeof(MyClass)];

MyClass& GetAt(size_t i) {
    return reinterpret_cast<MyClass&>(reserved[i * sizeof(MyClass)]);
}

int main() {
    for (int i = 0; i < SIZE; ++i) {
        new(&GetAt(i)) MyClass(); // placement new
    }

    for (int i = 0; i < SIZE; ++i) {
        GetAt(i).Say();
    }

    for (int i = 0; i < SIZE; ++i) {
        GetAt(i).~MyClass();
    }
    delete[] reserved;
    return 0;
}
関連ページ