[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 05/22 09:48 / Filesize : 257 KB / Number-of Response : 1036
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++ゲーム製作総合スレッド Part5



1 名前:名前は開発中のものです。 mailto:sage [2014/01/16(木) 00:00:31.27 ID:w6WW3hAo.net]
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その17
toro.2ch.net/test/read.cgi/gamedev/1383795645/

前スレ
C/C++ゲーム製作総合スレッド Part1
toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
toro.2ch.net/test/read.cgi/gamedev/1376262450/

761 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 21:14:58.11 ID:9RoLwWBR.net]
enumの要素数を静的に得たいんでしょ
将来お金の種類増えるかもしれないとか
配列使うぐらいならvectorにしとけとも思うが

762 名前:名前は開発中のものです。 mailto:sage [2014/05/11(日) 21:51:52.47 ID:3XauxJKc.net]
構造体じゃいかんのか

763 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 00:24:54.73 ID:cE27KFFY.net]
実際に使うの想像してこうなった。
例えば複数の種類のお金で買えるショップ機能を作りたい場合、
ショップ側でMoneyTypeという型と整数を持っておけば、処理が楽かなと思ったんだけど

764 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 01:09:04.70 ID:u2hQW3ha.net]
つまり>740が正解っぽい?

765 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 14:46:27.12 ID:Pch/P8kY.net]
ゲームで何時でも何処でも参照、代入できるデータって一般的にどうやって管理してます?
(例えば主人公のデータとか色々な場面で使いそうなもの)
今まで単純にデータクラスの中に静的メンバ変数で定義してグローバル的にやってたけど、
たまたまシングルトンで管理してるソースを見つけて、色々あるのかなって思った

766 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 18:22:11.56 ID:cE27KFFY.net]
シングルトンは嫌だからゲームマネージャークラス作ってそこにプレイヤーデータのポインタ持たせたりしてるけど、どうなんだろう??

767 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 18:22:35.24 ID:gXmiaEA2.net]
3Dゲームでカメラを遅らせて動かす場合って角度を線形補間してベクトルにしてる?
それともクォータニオンで球面線形補間してる?

768 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 20:18:49.99 ID:u2hQW3ha.net]
>>745
グローバル変数は可能な限り減らす、という理念の上でやってるなら、
それは実に正しい手法だと思うよ

769 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 22:53:45.27 ID:Qk7dokdu.net]
グローバル変数使いまくりの俺だが、グローバル変数は使わない方がいいと言われて
その方向でプログラム書き直したところ、手間の物凄く増えて辟易。
やり方を間違ってるんじゃないか感が半端ない。



770 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 23:01:55.91 ID:Qk7dokdu.net]
あるプログラム本に「JAVAなんかは誰が組んでも似たようなものになるが、
C++プログラムは人によってまるで違ってくる」とあったが本当みたいね。

本や解説サイトによって、サンプルがかなり違ってるようで混乱しまくるわ。

771 名前:名前は開発中のものです。 mailto:sage [2014/05/12(月) 23:39:44.01 ID:4H1ieXj2.net]
グローバル変数どうのこうのは保険をかけるためのもので手間を減らすものではないから仕方ないね

772 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 06:24:12.16 ID:hs5B6JyN.net]
グローバル変数使わずにやろうとすると関数の引数が複雑になりがちだからな
一人で作ってるコンパクトなプログラムくらいだったら使いまくりでいいと思うわ

773 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 10:40:34.58 ID:lZBhyb5G.net]
グローバル変数は初期化の順序が問題になる
複数のソースコードのあちこちに点在してるとそれが顕著になり
グローバル変数がクラスで依存関係があると動作保証が難しい
せめて組み込み型以外はポインタ型にして初期化の順序を決めちゃうのが安全

774 名前:名前は開発中のものです。 [2014/05/13(火) 11:22:50.82 ID:i7OBK+99.net]
>>738
'MoneyType' is not a class or namespace
ってでる

visualstudio2010だと出来たと思うんだけど、
Eclipse4.3だと出来ない

C++のバージョンによってなんか変わったのかな

775 名前:名前は開発中のものです。 mailto:sage []
[ここ壊れてます]

776 名前: mailto:2014/05/13(火) 12:15:46.52 ID:D4assd32.net [ >>753
enum classはC++/CLIだからだろ
Cにそんな構文はない
俺はC++には詳しくないけど実はあるのかな ]
[ここ壊れてます]

777 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 13:16:16.22 ID:LR5OHySp.net]
C++11から入った構文

778 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 22:03:52.41 ID:VqkITLrD.net]
グローバル変数はこう書けば良いんじゃね
使うところでだけglobal.hをインクルードしてさ

grobal.cpp
int a;

groubal.h
#ifndef _GLOBAL_H_
#define _GLOBAL_H_

 extern int a;

#endif

779 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 23:05:24.12 ID:RPOQlcBK.net]
>>756
わざわざ識別子を _ で始めるなんて沸いてるんじゃない?



780 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 23:15:35.87 ID:dsNPksM9.net]
是非はともかく、よく見かけるけどな

781 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 23:46:55.80 ID:VqkITLrD.net]
>>757
じゃあなんて書くんだ?

782 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 23:51:06.96 ID:dD8wYEBQ.net]
アンダーバー始まりは処理系予約とかじゃ無かったっけ
慣習的に

783 名前:名前は開発中のものです。 mailto:sage [2014/05/13(火) 23:59:25.01 ID:VqkITLrD.net]
>>760
まじかよ
学校でこう習ったよ
何でそんな書き方教えるんだよ
まぁ開発はVSだから#pragma onceしか書かないから知らんかっただけっすけどね・・・

784 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 00:50:31.19 ID:qOCHvgWh.net]
>>756
>>663

ついでにnamespaceにぶち込んでもいいのよ

785 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 00:53:50.93 ID:qOCHvgWh.net]
>>761
gccでもいつの間にかpragma once使えたりするんだよな
あれ、サッサと標準仕様に盛り込めばいいのになと思うよ

786 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 01:34:53.87 ID:Bv7wzu+p.net]
だいたいのコンパイラが対応してるみたいだしデファクトスタンダードってところ

787 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 02:44:20.77 ID:SkdpMvQe.net]
効率的には#pragma onceの方がいいと聞いたことはあるが
IDEによるかもしれん

788 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 03:12:47.17 ID:YePF79fh.net]
単純なi nclde guard は力技の処理だけど
pragma once は処理系次第で最適化されてるからね。

複数のプラットフォームを想定するなら
安全策をとって両方記述するのがオススメ。
pragma once があれば効率的に処理してくれるかもしれないし、
もしpragma once を理解できない処理系でも
inlude guardは必ず処理してくれるからね。

789 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 10:10:49.06 ID:2wCAVOdx.net]
>>766
両方記述?寝言は寝て言えw



790 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 10:25:37.80 ID:vvdSHZVH.net]
VC++に#pragma onceが入ってすぐの頃は
自動生成したヘッダには#pragma onceと#ifndef-define-endifが
コンパイラバージョンによって自動で切り替わるように書かれてたと記憶している
その辺から考えても、両方書くのは無駄じゃない

791 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 12:46:41.03 ID:1doe1mvx.net]
std::mapにenumとかstructを使いたいんだけど
template argument 4 is invalidっていうエラーが出ます

具体的には
map<アイテムID(enum型),アイテムパラメータ(struct型)> aaaaa;

って感じです。

パラメータっていうのはその名の通りアイテムを装備するとstructのメンバの
addHPとかaddMPっていう変数の分だけ上昇する感じで、

使い方はプレイヤーはアイテムIDだけ持っておけば、あとは必要な時々で値だけ取得できるかなという感じです。

792 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 13:13:18.32 ID:CAIv9eLR.net]
enum itemID{ID1=0, ID2, ID3, ID4};
struct itemParam{int p1; int p2;};

itemParam param;
map<itemID, itemParam> m;
m.insert(make_pair(itemID::ID1, param));

こんな感じで動かない?

793 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 13:15:39.85 ID:Ocn3g8OS.net]
>>769
比較関数がないって怒られてるんじゃね
一つ目の型を enum型じゃなくて int に変更するわけにはいかないの?

794 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 14:08:33.50 ID:Ke2wFa7k.net]
そもそもそれmapにする意味あるのか?
>>733みたいな感じで配列で十分な気がするんだけど

795 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 15:29:04.69 ID:Ocn3g8OS.net]
map だと必要な分だけ使えるじゃん

0〜 イベントアイテム
10000〜 武器
20000〜 鎧

みたいに

796 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 16:29:43.89 ID:YPHrxvGY.net]
enum使うなら10000から武器みたいな区分けがそもそも必要ないと思うんだけど

797 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 21:01:01.54 ID:qOCHvgWh.net]
>>769
それ、>>770で動きますよ

>>772-774
仮に、実行時に追加削除更新等なし、静的、参照専用、の情報の集合
という前提条件であればstd::map(赤黒木)を使う合理性はあまりないかな

>>773のようにキー番号が連続してないのでれば、ハッシュマップの類の
ほうが向いてますね
research.preferred.jp/2011/07/stllike-containers/
補足:記事中のLoki::Assoc

798 名前:Vectorとほぼ同じものとしてboost::flat_map
もあります。でも、>>774の言う通り、結局vectorでおkにもできますね

ま、完成しない(動かない)事に比べればどれ選んでも瑣末な違いなので
(特に昨今のPCなら)好きなの選べばいいかと思います。身も蓋もないね
[]
[ここ壊れてます]

799 名前:名前は開発中のものです。 mailto:sage [2014/05/14(水) 23:37:56.68 ID:XQ3tGmyB.net]
>>770
enumの最初を0と明示するだけで変わるんです?



800 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 13:17:04.58 ID:vi3A9MFw.net]
変わらないですよ。試せばすぐ分かりますけど、ム板のスレに誘導されたいです?

801 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 17:35:02.68 ID:CM4Haxt/.net]
普通に動くよね
コンパイラのバージョンとかで古いのだと駄目なのかな

802 名前:名前は開発中のものです。 mailto:sage [2014/05/15(木) 19:15:22.94 ID:D0s76qwM.net]
実は全然違うところでエラー出てるんじゃないの

803 名前:名前は開発中のものです。 mailto:sage [2014/05/16(金) 15:57:03.11 ID:RLWXI/UA.net]
ナビメッシュのやり方が書いてある本とかサイトとかってある?

804 名前:名前は開発中のものです。 mailto:sage [2014/05/16(金) 23:45:36.07 ID:bSd/X954.net]
> とかってある?

ありますよ
navigation mesh pathfinding algorithm game waypoint graph search
など適当なキーワードでググるといいです。動画によるアルゴリズムの
解説も出てきますね。書籍ならAI Game Programming Wisdom 4 が
個人的にオススメです

805 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 09:32:46.40 ID:a+6vW56R.net]
そういうのって概要だけ聞いて自分で考えて作った方が早くない?
サンプルコードみても理解するのに時間がかかるわ

806 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 10:01:46.81 ID:ATk/Gp35.net]
ゲームプログラミング本といえばGameProgrammingGemsシリーズなんだかな
最近の若者は読まないのか

807 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 11:06:25.43 ID:7UqYAydx.net]
現代の技術の世界において
英語が読めないのは脳が半分無いのと同じ。

それだけのこと。

808 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 12:01:48.26 ID:G1g9tldj.net]
翻訳したやつ読めば

809 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 12:34:45.87 ID:/WeYTHrm.net]
英語読めてもソースコード読めなかったりするし
プログラムは勉強したところでコード書けないのが大半らしいな
元々作文が下手とかそういう次元ではなく理解できないとか



810 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 12:40:03.20 ID:o9p3b0z7.net]
そもそも日本語で書いてあるプログラム解説書だって意味わかんないよw

811 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 13:44:47.33 ID:7UqYAydx.net]
>>785
半年遅れで付いていく人間は残念ながら奴隷で終わるよw
英語ができて最先端に追従する奴、ときには自分が最先端を発信する奴に
「あ、こいつバカだなww」と思われながら生きる惨めな三流人生が待っている。

それで良ければ英語なんて学ぶ必要はない。

まぁ、普通は(普通の知性の持ち主は、という意味)
修士課程で英語の論文を死ぬほど読んで
「喋れないけど読める」という妙な英語力を身につけられるんだけどねw

812 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 14:19:53.26 ID:ZLhv9Phh.net]
相変わらず病んでますね

813 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 14:53:46.32 ID:k3uAdR/A.net]
とりあえずナビメッシュのやり方教えて

814 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 17:55:58.84 ID:ZLhv9Phh.net]
780の人ですか?
具体的に何をやってみてどこでつまずいてるのか話せば答えやすくなるかと

815 名前:名前は開発中のものです。 mailto:sage [2014/05/17(土) 18:02:04.88 ID:G1g9tldj.net]
www.lameije.co.jp/navigationmesh.html

これじゃあかんのか

816 名前:名前は開発中のものです。 mailto:sage [2014/05/18(日) 17:48:20.69 ID:bAjzsQ9M.net]
オクツリーに障害物を表示させたいんだけど、オクツリーのある場所がどの座標なのかを

817 名前:調べる方法ってある? []
[ここ壊れてます]

818 名前:名前は開発中のものです。 mailto:sage [2014/05/18(日) 21:18:36.16 ID:uYYY8hgN.net]
ボクセルのインデックスを座標のビット配列にしてインデックスからボクセルの位置を取得

marupeke296.com/COL_2D_No8_QuadTree.html
これを3ビット毎にすれば出来ると思うんだがどうだろ

819 名前:名前は開発中のものです。 [2014/05/19(月) 04:39:02.31 ID:XNC2jE/Y.net]
この入門?みたいなサイトで勉強してたんだけどつまづいたので分かる方いたら教えてください
bituse.info/game/shot/11

for(int i=0;i<ENEMY_NUM;++i){
enemy[i]=new ENEMY(data[i].type,data[i].stype,data[i].m_pattern,data[i].s_pattern,data[i].in_time,data[i].stop_time,data[i].shot_time,data[i].out_time,data[i].x,data[i].y,data[i].speed,data[i].hp,data[i].item);
}

↑この文の enemy[i]=new ENEMYのイコールのところでオペランドと一致する演算子なんてねぇよって怒られます

原因として考えられるものってなんでしょうか?

for(int i=0;i<ENEMY_NUM;++i){
enemy = new ENEMY[i](省略);
  }

だったらいけるみたいなんですけど、違いがよくわからないです・・・



820 名前:名前は開発中のものです。 mailto:sage [2014/05/19(月) 05:31:35.17 ID:FdnDAUlP.net]
enemyの型がポインタの配列になってないんじゃないの

821 名前:名前は開発中のものです。 mailto:sage [2014/05/19(月) 10:00:14.39 ID:hjxHIKHc.net]
こうかな
正:ENEMY *enemy[ ENEMY_NUM ];
誤:ENEMY *enemy;

サイトを見ると省かれてるみたいだけど
敵を複数出すようにした時点で enemy を配列に変更しないといけない

822 名前:名前は開発中のものです。 mailto:sage [2014/05/19(月) 11:05:51.60 ID:CSMuM09V.net]
これコンストラクタの引数なんで構造体の参照渡しじゃないのか
無駄に読みにくいわ

823 名前:795 mailto:sage [2014/05/19(月) 11:33:54.01 ID:XNC2jE/Y.net]
できました。
ご指摘の通り、enemyを配列にしたら無事にコンパイルできました。

ちょっと私にはわかりにくいサイトだったようなので別のところで勉強してみます・・・

824 名前:795 mailto:sage [2014/05/19(月) 11:34:28.24 ID:XNC2jE/Y.net]
お礼を忘れていました

ご指摘ありがとうございました。

825 名前:名前は開発中のものです。 [2014/05/23(金) 00:32:00.04 ID:61iiZtPG.net]
おらLAMPしか知らないんだけども
C++で作ったリアルタイムなネットワークゲームのオンラインサーバって
どういう環境で動いてんだべ?
ソシャゲならPHPでhttpでいいかもしんねけども、
ネトゲって実行ファイル動かし続けてんのかね

826 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 00:34:30.27 ID:BlMjMm70.net]
>>801
お前から感じるそのしったか臭は一体何なんだ?

827 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 01:25:45.01 ID:61iiZtPG.net]
>>802
そんなこと言っても知りたいってのは本当なんだけど
ていうかソシャゲってphpでhttp返してるって聞いたんだが違うのか
ソース3種類ぐらい別のところから聞いたからそうだと信じてたけど

828 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 01:54:24.22 ID:W5hvE4XG.net]
上から目線だと>>802みたいなのが湧いて終わりw
それがネットの宿命。

和光同塵に励み、
下から目線で質問すると、
「そんなのこと知ってるよヴァカw」ってレベルの奴がトクトクと語り始める。
人生ってのは上手くいかないものだ。

やはりアドヴァイスはリアルな知り合いに、
顔を付きあわせて語り求めるのが一番良い。

ネットで集まってくるのは多くの場合クズだ。

829 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 04:11:24.69 ID:R2Hq6koN.net]
>「そんなのこと知ってるよヴァカw」ってレベルの奴がトクトクと語り始める。

そうかな。
知ったかが知ってる振りをして偉そうにした挙句、何も実のあることは言わずに去るだけな気もするが。



830 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 06:08:22.99 ID:61iiZtPG.net]
いや質問してるんだけど

831 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 08:01:15.27 ID:VwzG+tx8.net]
知ったかだけど

C/C++ならOSのAPIかライブラリ使ってTCPとUDP使い分けでしょ
PHPでもソケット通信

832 名前:出来るらしいし言語はなんでもいいんじゃないの
実行効率の問題はあるだろうけど
[]
[ここ壊れてます]

833 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 08:49:57.28 ID:UZe2P6GU.net]
個人のゲーム製作でC++使うメリットってあるかな?
Cの方が小回り効くし使いやすいと思うんだが

834 名前:名前は開発中のものです。 [2014/05/23(金) 08:57:29.89 ID:WZOW9ZIo.net]
C++のほうがゲーム向き。
基本的にC言語の機能を全て含んでいて、追加部分を使いたくなれば使わなければいいだけ。
使って便利な機能を使うことで開発効率は上がる。

835 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 09:01:24.07 ID:UZe2P6GU.net]
多人数やチームで作るなら保守性とか高いし必要だとは思うんだけど
個人製作なら手続きが多い分無駄な気がするんだよね>C++

836 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 09:24:40.27 ID:J41CukcG.net]
複数のゲームオブジェクトが相互作用するような場合はポリモーフィズム使うと楽になる
継承して独自の部分実装すれば新しいオブジェクト作れるしメンテもしやすい

837 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 09:25:32.36 ID:gVP8nGPF.net]
準備されてるクラスライブラリが圧倒的にC++の方が便利

838 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 09:32:14.08 ID:mJ3PfvgI.net]
スマートボインタとかCじゃできないしな

839 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 09:40:35.21 ID:61iiZtPG.net]
構造体でオブジェクト表現してるのか



840 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 10:13:18.75 ID:UZe2P6GU.net]
構造体でほとんど間に合うと思うんだよな。
トリッキーに何しても怒られないし。

841 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 10:19:18.29 ID:3Qz0nlZE.net]
C++使ったらコードの見通し良くなって楽ってだけで、Cに慣れてるならそりゃCの方が楽
ミニゲーム程度ならどっち使っても変わらん

842 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 10:21:23.05 ID:u1Ct/Di+.net]
構造体を引数としてとる関数は文が長くなりがち
構造体に関数ポインタ入れるより仮想関数のが簡潔に書けるし分かり易い
名前空間がないと名前の衝突が起こるから冗長なプリフィクスが必要になる
DirectXとかCOM周りはC++のが簡潔に書ける

843 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 10:35:11.17 ID:UZe2P6GU.net]
慣れてるせいなんだろうけど関数ポインタで簡潔に書けちゃうんだよな。
むしろ手続きや決まりごとの分C++の方が長くなっちゃうんだよ。
スマートポインタも俺からするとプログラマが解放し忘れてても勝手に解放って逆に怖いと思うんだよ。
メモリの使用状況なんかデバッグ画面かなんかで常に確認するべきだしメモリの解放は意識してやりたいなあ。

844 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 10:48:05.07 ID:u1Ct/Di+.net]
意識してスマートポインタ使うんだから開放されるタイミングは判る
気にしないのは実装部分だけ
いくら自前で管理しようとも例外をsetjump/longjumpで無理やり組むしかないCには容易には出来ない安全性もある
逆にオーバーロードとかコピーが複雑なので頼ったほうが良いC++の悪さの部分でもあるが

845 名前:名前は開発中のものです。 [2014/05/23(金) 10:50:19.88 ID:WZOW9ZIo.net]
自動開放で平気だ。
かなりの言語が強制て自動開放を取り入れている。
パフォーマンスだけの問題だろう。

846 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 10:59:56.27 ID:UZe2P6GU.net]
俺がアセンブラ時代から組んでるせいなんだろうけど自動解放って怖いんだよな。
メモリの管理状況やクリアも全部自前のプリミティブな関数でやりたいと思っちゃうんだよな。
まあ気にし過ぎなのかもしれないね。
昔はCも最適化が甘くてオーバーヘッドが酷かったからどうも知らない間にメモリを触られてたりするのが信用できなくてなあ。

847 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:06:17.74 ID:u1Ct/Di+.net]
スタックの自動開放も怖いのかい?寿命で消えるのは同じことだよ
アセブンブリ出力みてりゃ大したことやってないよ

848 名前:名前は開発中のものです。 [2014/05/23(金) 11:12:25.32 ID:WZOW9ZIo.net]
C言語のauto変数も勝手に開放するな

849 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:14:29.88 ID:UZe2P6GU.net]
ま、俺の気にし過ぎなんだろうね。

初心者が構造体のコピーとか平気で書いちゃってんの見てビックリしたりする方だからさ。
記述は簡潔だけどその一文でどのくらいオーバーヘッドかかってるかわかって書いてんのか?とか思っちゃうんだよ。
簡易なコード記述の生産性と実行速度は別なんで、その辺はなるべくコワモテでいいんじゃないかと思うんだよ。



850 名前:名前は開発中のものです。 [2014/05/23(金) 11:15:51.86 ID:WZOW9ZIo.net]
CとC++の話で自動開放の話になるのがそもそもおかしいな。
C++はガベージコレクションを取り入れたわけでなく、メモリ管理についてはCと大差ないだろ。
Cでもスマートポインタ使えるだろ。

851 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:16:04.73 ID:wh7XodOP.net]
ID:UZe2P6GU
わかる。deleteのタイミングって自分で管理したい。
そもそも、スマートポインタに頼ろうという発想が出る時点で、
そのソースはすでにごっちゃになってないかと問いたい。

852 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:25:27.68 ID:LtRYMhK0.net]
スマポのソース見ればどうなるかきっちりわかるんだから見てみりゃいいじゃん

853 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:28:39.46 ID:u1Ct/Di+.net]
>>826
好きな時にnullptrを入れて開放してもいいんだぜ
スマートポインタのオブジェクトの寿命=解放のタイミング、一部がコピーで寿命が移動するだけなんだから
Cでmallocしたポインタの値を見失うことがないようなプログラムの組み方ならごっちゃにならない

854 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:33:42.15 ID:CnVFPzVq.net]
関数のデストラクタとかあれば良いのにな

855 名前:名前は開発中のものです。 [2014/05/23(金) 11:33:43.66 ID:WZOW9ZIo.net]
Boehm GC を使う

The Boehm-Demers-Weiser conservative garbage collector (Boehm GC) は、C言語用のメジャーなガベージコレクタ。
さまざまなソフトウェアがこのライブラリを使っている。

ガベージコレクタを使うと、メモリを好きなだけ確保するだけでよく、解放は自動的にしてくれる。
巨大なメモリを明示的に解放するような場合のほかは、メモリを解放するコードを書く必要はない。

Boehm GCは、保守的GCという方法でガベージコレクトする。定期的にメモリ内を走査し、使われていないと見られるオブジェクトのメモリを回収していく。
Boehm GC以外では、boost::shared_ptrが参照カウント方式を用いている。
www.nslabs.jp/boehmgc.rhtml

856 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:38:28.27 ID:Q1W0mucT.net]
プログラマがコントロール出来ないGCは処理落ちの原因になるからやめた方がいい

857 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:41:53.89 ID:UZe2P6GU.net]
>>831
同感。こういうのが嫌なんだよ。
記述上だけでスマート・簡潔に組めたつもりで実際は実行速度がグダグダになってる。

858 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 11:45:53.20 ID:wh7XodOP.net]
>>827


>>828
そもそもの動機だよ。誰がスマートポインタをなぜ欲しがるのかってこと。
既にnew/delete対応なんてスッキリハッキリ管理されてるはず。
スマートポインタが活躍する一部場面がある、というのなら限定的に使っていいと思うが、
それはそれ、それだけのこと。

あとたぶん、ID:WZOW9ZIoはもう喋らないほうがいいな。

>>831
たとえばC#でゲームつくってるとGC動かさないように気をつかったり、
GCの実装に振り回されたり、なんとも滑稽な事態に陥るw

859 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 12:03:37.45 ID:HE2P9lkw.net]
>>833
標準ライブラリとかboostのソースコードにスマポのソースコードあるでしょ?
それ見ればどういうタイミングで解放されるかわかるんだからきっちり自分でコントロールできる



860 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 12:04:27.91 ID:u1Ct/Di+.net]
>>832
他所の実装の関数呼び出しで見た目だけ簡潔に組めたとしても、その関数が遅いかは不明だからな
スマートポインタと全く違うGCは要らないけどな

>>833
動機なんて解放のコードがあちこちにあるより最初に決めておいた方が楽だろ
newは一個でも同じような解放コードのdeleteがあちらこちらの関数に書かれていて
分岐によりそれが実行されるかは不明よりはいいと思うので
デストラクタのおかげで関数後半にfreeが消えるだけでも記述、確認の手間も省ける

コストも結局開放するのなら軽いunique_ptrみたいのならCと変わらんよ
shared_ptrをスマートポインタと想定して言ってるのかもしれんが

スマートポインタなくてもCよりC++のが楽にはなったと思うけどな
Cから移行したときは同名関数の引数違いのオーバーロードですらありがたいよ

861 名前:名前は開発中のものです。 mailto:sage [2014/05/23(金) 12:19:19.44 ID:wh7XodOP.net]
>>835
new/deleteの対応がおぼつかないようなコードは既に臭ってる。
俺の言いたいことはアンタには十分伝わっている気がするんで終わる。

> 引数違いのオーバーロードですらありがたいよ

それよ。名前空間とオーバーロード。
これだけで名前に関する負担が減って十分嬉しい。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<257KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef