36章 placement new

http://www.geocities.jp/ky_webid/cpp/language/036.html

これまでになくややこしい概念ですね。

要はnewする時にメモリ確保を予め用意しておいた領域で行うかそうでないかの違いみたいです。

とにかく実装してみます。

#include <iostream>
#include <new>
#include <cstring>
using namespace std;

char global_area[1000];

int main () {
    char* p = new(global_area) char[10];
    strcpy_s(p,10,"abcdefghi");
    
    // 同じ値が表示される
    cout << p << endl;
    cout << global_area << endl;
    
    return 0;
}
$ main
abcdefghi
abcdefghi

なるほど。

ですがdeleteのくだりが全然意味がわかりませんでした。

再利用したいと書いてありましたが、初めから再利用可能な気がするんですが・・・

#include <iostream>
#include <new>
#include <cstring>
using namespace std;

char global_area[1000];

int main () {
    char* p = new(global_area) char[10];
    strcpy_s(p,10,"abcdefghi");
    
    cout << p << endl;
    cout << global_area << endl;
    
    // 新しく確保する
    char* p2 = new(global_area) char[5];
    strcpy_s(p2,10,"aaaa");
    
    cout << p2 << endl;
    
    // p2の値で上書きされている
    cout << p << endl;
    cout << global_area << endl;
    
    return 0;
}
$ main
abcdefghi
abcdefghi
aaaa
aaaa
aaaa

むしろ、続きから確保することってできないんでしょうか?

う〜ん、ちょっと理解不足です・・・。