ふんぐわ

アバター
大白定義
記事: 14
登録日時: 14年前
住所: 三重県

ふんぐわ

投稿記事 by 大白定義 » 14年前

C++の勉強をしなおしてて、placement newなるものがあることに気が付き、
リスト管理クラスでchar Buffer[(タスクの最大サイズ)×(タスクの個数)]という領域を作っておいて、
リストのノードのほうでNode.Buffer = new(List.Buffer) char[タスクの最大サイズ]みたいに宣言すれば、
メモリの管理がしやすいのではないかなー、とか思ったんですよ。(すみません、文にして説明しづらいです)
タスクを生成する時は、Task = new(Node.Buffer) Task()とやる、みたいな感じで。

しかし現在、リスト自体の作成に苦労中。
単方向リスト作るのにすら苦戦しているなんて…もうねorz

ISLe
記事: 2650
登録日時: 14年前

RE: ふんぐわ

投稿記事 by ISLe » 14年前

>ISleさん

new演算子のオーバーライドはなんとなく難しそうなイメージが^^;
でも面白そうなので調べてみます
最後に編集したユーザー 大白定義 on 2010年12月14日(火) 22:54 [ 編集 1 回目 ]

アバター
大白定義
記事: 14
登録日時: 14年前
住所: 三重県

RE: ふんぐわ

投稿記事 by 大白定義 » 14年前

ぶっ!
ちょっ!!

ブログの感覚でボタン押したら編集してしまった!!

うぎゃあすみませんすみませんすみません!!!orz

ISLe
記事: 2650
登録日時: 14年前

RE: ふんぐわ

投稿記事 by ISLe » 14年前

placement newでなくてnew演算子のオーバーライドのほうがメンテが楽だと思います。

…と最初のコメントに書きました。

new演算子のオーバーライドはとりあえず
void *operator new(size_t size) ;
void operator delete(void *p); // operator newとセット
というメンバ関数を定義すれば使えます。
operator newはsize分のメモリの先頭アドレスを返します。
operator deleteはpのアドレスのメモリを解放します。

operator newで事前に確保したメモリの使用フラグを立ててアドレスを返し、
operator deleteで使用フラグを倒す(メモリの解放はしない)という実装にできます。
同時に自動的にオブジェクト管理リストに追加・削除するといったこともできます。

アバター
大白定義
記事: 14
登録日時: 14年前
住所: 三重県

RE: ふんぐわ

投稿記事 by 大白定義 » 14年前

>ISLeさん

本当にすみませんでした。
まさか別の人のコメントも無条件に弄れるとは思わずorz
operator newは調べてみたら愛読してる本のメモリ管理の部分にバッチリ書いてありました。
コピペするだけじゃ勉強にならないのでじっくりどういう処理をしているのか見てみようと思います。

丁寧にありがとうございました。