動的オブジェクトの管理 – プログラミング – Home

動的オブジェクトの管理
 
通知
すべてクリア

動的オブジェクトの管理


晴天
 晴天
(@晴天)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

よろしくお願いいたします。

実験的に、サーバーで対戦型オセロの実装を行なっています。
クライアントは複数人で2人一組のペアが揃った時点で、ゲームを開始することとします。
その際、ペアの分だけオブジェクトを動的に、生成しゲーム終了時や、エラーが発生し
終了せざる得ない場合など、オブジェクトを破棄することとします。
生成するオブジェクトを複数生成するのにどのような技法が使えますでしょうか
ご教示願います。

#include <iostream>
#include <iterator>
#include <vector>

using namespace std;

// 盤面クラス
class Board {
int size;

vector< vector<int> > Array;
// コンストラクタ
Board() : size(8)
{
// resize
Array.resize( size );
for(int i = 0; i<size; ++i){ Array[i].resize( size ); }

// set
for(int i=0; i< size;i++) {
for(int j=0; j<size; j++) {
Array[i][j] = 0;//(i+1)*(j+1);
}
}
}

// デストラクタ
~Board(){}

public:
void SetBoard(int x, int y) { Array[x][y]; };

int GetBoard(int x, int y) { return Array[x][y]; };
};

int main () {
Board *pBoard1 = new Board;
Board *pBoard2 = new Board;
// 複数オブジェクトを作成しスマートに管理したい
delete *pBoard1;
delete *pBoard2;
return 0;
}


引用解決済
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

普通にこれでよくない?
vector<Board> boards;

newとdeleteを外に出したいならば
vector<Board*> boards;


返信引用
nowhre
 nowhre
(@nowhre)
ゲスト
結合: 17年前
投稿: 1
 

Boost 使ってよいのなら shared_ptr かな?

#include <boost/shared_ptr.hpp>
int main() {
typedef boost::shared_ptr<Board> BoardPtr;
BoardPtr pBoard1(new Board);
BoardPtr pBoard2(new Board);
// 通常のポインターみたいにアロー演算子が使える
pBoard1->HooBar();
// スコープアウト時にどこからも参照されなくなったら自動的にdeleteされる
}

もしくは Boehm GCとか?
Boehm GCはガベージコレクタで、用はどこからも参照されなくなったオブジェクトを自動
的に破棄してくれます。
詳しくはぐぐってみてください。


返信引用
晴天
 晴天
(@晴天)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

たいちろうさん、nowhreさんお世話になります。
たいちろうさんへ
>>vector<Board> boards;
Boardクラスをvectorで管理するアイデアですね、参考にさせて頂きます。

>>newとdeleteを外に出したいならば
>>vector<Board*> boards;
ごめんなさい、読解力がなくて
「newとdeleteを外に出したいならば」の解釈ですがnewやdelete関数を使う場合と理解
して、いいでしょうか?

nowhreさんへ
>>Boost 使ってよいのなら shared_ptr かな?
Boostの経験は少ないですが、参考にさせていただきます。

処で、実際オブジェクトを生成する際
vector<Board> boards1;
vector<Board> boards2;
とか
BoardPtr pBoard1(new Board);
BoardPtr pBoard2(new Board);

このような使い方になるのですが、この時に”boards1”とか”pBoard1”という
オブジェクトを、オブジェクト指向っぽく、生成する手法があれば、ご教示願いたいの
ですが。

Cの発想しかないので

int nPair; // ペアの番号
switch ( nPair ) {
case 1:
vector<Board> boards1;
break;
case 2:
vector<Board> boards2;
break;
}

こんな貧相なアイデアしか、思い浮かびません・・・・・orz


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

「オブジェクト指向っぽく生成する」が理解できません。


返信引用
晴天
 晴天
(@晴天)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

επιστημηさんお世話になります
>>「オブジェクト指向っぽく生成する」が理解できません。
うまく伝わりませんでした、ごめんなさい
switch文を用いずに、Boardオブジェクトを複数、複製する方法はないでしょうか。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

Board* boards = new Board[2]; ぢゃダメなんすか?
pair<Board,Board> pair_of_board; とか。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

>>vector<Board*> boards;
ごめんなさい、読解力がなくて
「newとdeleteを外に出したいならば」の解釈ですがnewやdelete関数を使う場合と理解
して、いいでしょうか?

元のソースにnewやdeleteがあったから書きました。
vectorでなく配列で管理する場合にも、
Board boards[MAX];と
Board *pBoards[MAX];という2通りの方法があり一長一短があると思います。
晴天さんのケースではどちらが良いか分かりませんので、
普通にvectorでインスタンスを管理する方法と、
インスタンスへのポインタを管理する方法の両方を書いたのです。

> vector<Board> boards1;
> vector<Board> boards2;

ペアの数だけBoardが必要なのであって、vector<Board>は1つで良いと思っていたのですが。

> オブジェクトを、オブジェクト指向っぽく、生成する手法があれば、ご教示願いたいの
> ですが。

このケースでどうしたら良いかは、何をしたいのかが情報不足。
一般論としてどうしたら良いかなら、デザインパターンの勉強でもしてみてはどうでしょう。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

CPareクラスをつくって
Board Board1;
Board Board2;
の2つをメンバ変数にもつ
ペアができたら、CPareを生成する

ってのはどうでしょう?


返信引用
愛飢え男
 愛飢え男
(@愛飢え男)
ゲスト
結合: 17年前
投稿: 8
 

>実験的に、サーバーで対戦型オセロの実装を行なっています。
その前にコンピュータVS人で作ってみる。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました