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
むしろ、続きから確保することってできないんでしょうか?
う〜ん、ちょっと理解不足です・・・。