2010 |
05,26 |
«1日»
必要な時に一部だけ引っ張ってこれる、
そういうデザインの仕方はないものでしょうか。
例えばサウンド関連です。
サウンドは多くのオブジェクトを介して
同じ物が使われたりすると思います。
そう言った場合、
オブジェクトにサウンドクラスを持たせると
どう処理するにしろ、
かなり面倒なことになるでしょう。
逆に、グローバルな場所に置くとしても、
依存関係が多岐に渡ってしまい
コンパイル速度など
色々な部分でのパフォーマンスが落ちてしまうと思います。
一定種類ごとに別のファイルにして、
グローバルな空間に置いておくのが今のところ良さそうに思えるのですが
ファイルを多く作らなければならなくなり、
ベストとも言い難いです。
やはり考え抜いてオブジェクトにサウンドクラスを持たせるのが
一番よくなるとは思うのですが、
パッと思いつくようなエレガントな方法が思いつきません。
そういうデザインの仕方はないものでしょうか。
例えばサウンド関連です。
サウンドは多くのオブジェクトを介して
同じ物が使われたりすると思います。
そう言った場合、
オブジェクトにサウンドクラスを持たせると
どう処理するにしろ、
かなり面倒なことになるでしょう。
逆に、グローバルな場所に置くとしても、
依存関係が多岐に渡ってしまい
コンパイル速度など
色々な部分でのパフォーマンスが落ちてしまうと思います。
一定種類ごとに別のファイルにして、
グローバルな空間に置いておくのが今のところ良さそうに思えるのですが
ファイルを多く作らなければならなくなり、
ベストとも言い難いです。
やはり考え抜いてオブジェクトにサウンドクラスを持たせるのが
一番よくなるとは思うのですが、
パッと思いつくようなエレガントな方法が思いつきません。
PR
2010 |
05,25 |
«1日»
shared_ptrをこちらのタイミングで破棄したい場合はreset()
実体をコピー渡ししたい場合は
SomeClass someClassSbt ;
std::tr1::shared_ptr<SomeClass> someClassPtr ;
someClassPtr =
std::tr1::shared_ptr<SomeClass>
(new someClass(someClassSbt)) ;
これで出来ると思います。
便利ですねえ。
実体をコピー渡ししたい場合は
SomeClass someClassSbt ;
std::tr1::shared_ptr<SomeClass> someClassPtr ;
someClassPtr =
std::tr1::shared_ptr<SomeClass>
(new someClass(someClassSbt)) ;
これで出来ると思います。
便利ですねえ。
2010 |
05,24 |
«1日»
assert(false)
よりは
assert(0)
の方が個人的には奇麗だと思っています。
しかし代わって
while(1)
よりも
while(true)
の方がなんとなくきれいな気がします。
false == 0 ですが
true == 1 とも限らないという所が
関連しているのかなと思います。
よりは
assert(0)
の方が個人的には奇麗だと思っています。
しかし代わって
while(1)
よりも
while(true)
の方がなんとなくきれいな気がします。
false == 0 ですが
true == 1 とも限らないという所が
関連しているのかなと思います。
2010 |
05,23 |
«4日»
2回deleteはデバッグエラーになりますよね。
しかしそのポインタがnewされているかどうかがわからないけども
deleteしたい場合というのは有ると思うのですが
newとdeleteは対となっているべき等と
よく言われています。
上の例の場合、
それをやろうとするなら
-*- -*-
if(pointer == 0)
{
//ポインタが0ならdeleteしない
}
else
{
delete pointer ;
pointer = 0 ;
}
-*- -*-
こんな構造をマクロか何かで
指定することになると思います。
newとdeleteは対となっているべき
という考え方からすれば、これは悪手な感じがするのですが
どうなんでしょう。
-*- -*-
書いた5分後くらいに
「shared_ptrを使えば全て解決する」
ということに気付いてしまいました…。
しかしそのポインタがnewされているかどうかがわからないけども
deleteしたい場合というのは有ると思うのですが
newとdeleteは対となっているべき等と
よく言われています。
上の例の場合、
それをやろうとするなら
-*- -*-
if(pointer == 0)
{
//ポインタが0ならdeleteしない
}
else
{
delete pointer ;
pointer = 0 ;
}
-*- -*-
こんな構造をマクロか何かで
指定することになると思います。
newとdeleteは対となっているべき
という考え方からすれば、これは悪手な感じがするのですが
どうなんでしょう。
-*- -*-
書いた5分後くらいに
「shared_ptrを使えば全て解決する」
ということに気付いてしまいました…。
2010 |
05,19 |
«0日»
-*- -*-
#include <memory>
#include <vector>
using namespace std ;
enum eHOGE
{
HOGE_A,
HOGE_B,
HOGE_LAST
}
class A
{
};
int main()
{
vector<tr1::shared_ptr<A>> a ;
//pattern:1
//a.push_back(tr1::shared_ptr<A>(new A(/*HOGE_A*/))) ;
//a.push_back(tr1::shared_ptr<A>(new A(/*HOGE_B*/))) ;
//pattern:2
//a.resize(HOGE_LAST) ;
//a.at(HOGE_A) = tr1::shared_ptr<A>(new A(/*HOGE_A*/)) ;
//a.at(HOGE_B) = tr1::shared_ptr<A>(new A(/*HOGE_B*/)) ;
return 0 ;
}
-*- -*-
そんな場合は望ましくないという突っ込みが有りそうですが、
固定長のvectorを使う場合に、
resizeしてから使うのか、push_backしていくのか
という微妙な疑問がありました。
後それと、
tr1::shared_ptr<class Hoge>
が非常に長ったらしいので
typedefをするとして、
どういう名前にするかも若干疑問です。
それとそれと、
今回初めてソースらしきものを張ったわけですが、
シンタックスハイライトの仕方がわからないです…。
他のブログだとよく見かけるのですが。
#include <memory>
#include <vector>
using namespace std ;
enum eHOGE
{
HOGE_A,
HOGE_B,
HOGE_LAST
}
class A
{
};
int main()
{
vector<tr1::shared_ptr<A>> a ;
//pattern:1
//a.push_back(tr1::shared_ptr<A>(new A(/*HOGE_A*/))) ;
//a.push_back(tr1::shared_ptr<A>(new A(/*HOGE_B*/))) ;
//pattern:2
//a.resize(HOGE_LAST) ;
//a.at(HOGE_A) = tr1::shared_ptr<A>(new A(/*HOGE_A*/)) ;
//a.at(HOGE_B) = tr1::shared_ptr<A>(new A(/*HOGE_B*/)) ;
return 0 ;
}
-*- -*-
そんな場合は望ましくないという突っ込みが有りそうですが、
固定長のvectorを使う場合に、
resizeしてから使うのか、push_backしていくのか
という微妙な疑問がありました。
後それと、
tr1::shared_ptr<class Hoge>
が非常に長ったらしいので
typedefをするとして、
どういう名前にするかも若干疑問です。
それとそれと、
今回初めてソースらしきものを張ったわけですが、
シンタックスハイライトの仕方がわからないです…。
他のブログだとよく見かけるのですが。
カレンダー
リンク
カテゴリー
プロフィール
HN:
粘土男
性別:
男性
自己紹介:
レッドストーン、ルシエルブルー、
アラド戦記、ラテール、エルソード、
ファンタジーアースゼロ、などを
せこせことやっております。
プログラミングは、修練中です。
twitter:@rosukaruklame
アラド戦記、ラテール、エルソード、
ファンタジーアースゼロ、などを
せこせことやっております。
プログラミングは、修練中です。
twitter:@rosukaruklame