次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part140
■ このスレッドは過去ログ倉庫に格納されています
2019/01/13(日) 05:56:22.70ID:9RrR7Arz
235デフォルトの名無しさん
2019/01/27(日) 22:58:11.13ID:ZSGm5vTO みなさん、そんなに高度なプログラム書いてるんですか?
集団開発してる人間としてはちょっと信じられない。趣味でやるならわかるけど。
集団開発してる人間としてはちょっと信じられない。趣味でやるならわかるけど。
236デフォルトの名無しさん
2019/01/27(日) 23:00:26.40ID:ZSGm5vTO 商用だけどparasoftのC++Test使ってて、なかなかいいですよ
237デフォルトの名無しさん
2019/01/27(日) 23:02:22.43ID:2bDlyD0p 昔はSoftIceとBoundsChecker使っていたけど
238デフォルトの名無しさん
2019/01/27(日) 23:08:30.18ID:24JMkTQP テストは基本手動で確認でしょう
239デフォルトの名無しさん
2019/01/27(日) 23:12:29.52ID:RXDbyT6p googletest使ってる。準備しやすいし、そこそこ信用できるから。
240デフォルトの名無しさん
2019/01/27(日) 23:12:43.73ID:8lOUNKLd VC++のネイティブテスト使ってる
しかしGithubあたりでCIするには相性よろしくない・・・
しかしGithubあたりでCIするには相性よろしくない・・・
241デフォルトの名無しさん
2019/01/27(日) 23:20:00.64ID:Br2P5aSl テストなんか手で書こうがフレームワーク使おうが同じ
242デフォルトの名無しさん
2019/01/28(月) 02:32:45.22ID:3CrwaDYk >>234
ライブラリのように汎用性の高いものは、テスト用のプロジェクト作ってる(そういうのは大体テンプレ使っててビルドに時間を食われるので)。
実装コードの単体テスは、main のド頭で起動時に必ず実行(リリース時は外す)。
専用ツールの必要性を感じた事がないです。
ライブラリのように汎用性の高いものは、テスト用のプロジェクト作ってる(そういうのは大体テンプレ使っててビルドに時間を食われるので)。
実装コードの単体テスは、main のド頭で起動時に必ず実行(リリース時は外す)。
専用ツールの必要性を感じた事がないです。
243デフォルトの名無しさん
2019/01/28(月) 07:11:36.24ID:i7DZcl3V MyClass c;
と
MyClass* c = new MyClass();
は何が違うんですか?
クラスはnewしないと使えないと書いてあるサイトもありますが上記の表記でも使えているようです
と
MyClass* c = new MyClass();
は何が違うんですか?
クラスはnewしないと使えないと書いてあるサイトもありますが上記の表記でも使えているようです
244デフォルトの名無しさん
2019/01/28(月) 07:24:44.89ID:EQR7aoi9 「スタック ヒープ」でググっといで
245デフォルトの名無しさん
2019/01/28(月) 07:24:45.02ID:sAOHdtTv 質問させて
以下のコードで関数functionの引数にクラスhogeのインスタンスのみを受け付けるようにするにはどうしたらいい?
template<typename T>
class hoge {
省略
};
template<typename T>
class fuga {
省略
};
template<ここがわからない>
hogehoge function(わらないclass hoge のインスタンスのみを受け付けたい)
{
省略
}
以下のコードで関数functionの引数にクラスhogeのインスタンスのみを受け付けるようにするにはどうしたらいい?
template<typename T>
class hoge {
省略
};
template<typename T>
class fuga {
省略
};
template<ここがわからない>
hogehoge function(わらないclass hoge のインスタンスのみを受け付けたい)
{
省略
}
246デフォルトの名無しさん
2019/01/28(月) 07:24:53.78ID:i7DZcl3V すみません、使うメモリ管理の方法が違うということなんですね
では、メモリ使用量をほとんど気にしなくていいPC用アプリの場合はnewを使うのは配列を作るときくらいでしょうか?
では、メモリ使用量をほとんど気にしなくていいPC用アプリの場合はnewを使うのは配列を作るときくらいでしょうか?
247デフォルトの名無しさん
2019/01/28(月) 07:29:06.39ID:EQR7aoi9 template<typename T>
hogehoge function(hoge<T> h)
{}
hogehoge function(hoge<T> h)
{}
248デフォルトの名無しさん
2019/01/28(月) 07:46:48.21ID:SfbWAPdM249デフォルトの名無しさん
2019/01/28(月) 07:50:40.23ID:i7DZcl3V250デフォルトの名無しさん
2019/01/28(月) 07:52:22.02ID:rMzIHoqv251デフォルトの名無しさん
2019/01/28(月) 10:26:04.99ID:zheEgWgK252デフォルトの名無しさん
2019/01/28(月) 11:15:40.31ID:ZoLOGP13 すまぽ使う場合って明示的にdeleteはしないんですか?
253デフォルトの名無しさん
2019/01/28(月) 11:21:32.36ID:6rt4c1kU 内部で明示的にdeleteされてます
254デフォルトの名無しさん
2019/01/28(月) 12:04:58.06ID:FhzO2Cs0 中に人がいるってことですか?
255デフォルトの名無しさん
2019/01/28(月) 12:18:45.84ID:Pe4cCHSm sumapoってさ
参照カウント処理はアトミックなの?
シングルスレッドのときにオーバーヘッドは問題ないの?
参照カウント処理はアトミックなの?
シングルスレッドのときにオーバーヘッドは問題ないの?
256デフォルトの名無しさん
2019/01/28(月) 12:35:54.44ID:zheEgWgK shared_ptrかunique_ptrかで違う
パフォーマンス気にするなら自分で計測しろ
パフォーマンス気にするなら自分で計測しろ
257デフォルトの名無しさん
2019/01/28(月) 12:51:46.26ID:4hOio++r さすがに今時アトミックなインクリメントをネイティブにサポートしてないようなCPUは考慮不要だろ
そんなゴミデバイスをターゲットにした開発でスマポなんか使うとは思えん
そんなゴミデバイスをターゲットにした開発でスマポなんか使うとは思えん
258デフォルトの名無しさん
2019/01/28(月) 12:52:40.84ID:yOibm1qy >>251
>ただし今時生で使うのはご法度なのでスマポで使う
そんなことない。C++ の本流は今でも生ポインタ。
ポインタは理解できない人が多くて、そういう人が嫌いがちなだけ。
それは彼女自身が理解できないから。
>ただし今時生で使うのはご法度なのでスマポで使う
そんなことない。C++ の本流は今でも生ポインタ。
ポインタは理解できない人が多くて、そういう人が嫌いがちなだけ。
それは彼女自身が理解できないから。
259デフォルトの名無しさん
2019/01/28(月) 13:06:48.75ID:ji//xT0N そやな
260デフォルトの名無しさん
2019/01/28(月) 13:20:55.77ID:4hOio++r そもそも有効範囲を把握できなくなるような行方不明オブジェクトなんかそんなに必要になるかね
GC言語でもそんなの滅多にないわ
大抵のケースではオブジェクトの生存期間と一致する適当な親玉クラスが存在するから、そいつがまとめて掃除するように作るだろ
GC言語でもそんなの滅多にないわ
大抵のケースではオブジェクトの生存期間と一致する適当な親玉クラスが存在するから、そいつがまとめて掃除するように作るだろ
261デフォルトの名無しさん
2019/01/28(月) 14:17:08.44ID:XpM1DMeN 彼女?
262デフォルトの名無しさん
2019/01/28(月) 14:23:26.09ID:sZicpJ+d 本流が何を指すのかよく分からないが個人的な観測範囲ではスマポ推奨する人間の方が多い
大体ポインタ理解した所でヒューマンエラーが防げる訳じゃないんだからスマポに頼るほうが結果的に楽だと思うがなぁ
大体ポインタ理解した所でヒューマンエラーが防げる訳じゃないんだからスマポに頼るほうが結果的に楽だと思うがなぁ
263デフォルトの名無しさん
2019/01/28(月) 14:40:06.30ID:pZ9xHEQJ いっさいdeleteしないという方針にするならわかるけど混ざるのは嫌だね
いざというときの安全策というのでは曖昧すぎ
いざというときの安全策というのでは曖昧すぎ
264デフォルトの名無しさん
2019/01/28(月) 15:18:30.76ID:VEGJrOTQ RAIIとかデストラクタ書くのめんどいとかでスマポよく使うけど
それでもファクトリ?パターンとか生存期間の明確な管理をすべき場面、戻り値の共変性のために
そこそこ生ポ使うけどな
生ポがご法度とか、お前ご法度言いたいだけちゃうんかと
それでもファクトリ?パターンとか生存期間の明確な管理をすべき場面、戻り値の共変性のために
そこそこ生ポ使うけどな
生ポがご法度とか、お前ご法度言いたいだけちゃうんかと
265デフォルトの名無しさん
2019/01/28(月) 15:25:11.18ID:sZicpJ+d そりゃdeleteはしない方針ですよスマポ使うんだから
deleteだって言ってるからメモリアドレスを扱いたいのではなくヒープ確保の結果であるポインタとして話をするね
ライフタイム全部管理し切る自信があって、ムーブとか書くのがめんどくさいってんなら生ポでも良いと思う
ただ人間そんなに優秀じゃないので必然性に迫られない限りスマポ使う方が大多数には向いてるし、ヒープ確保の結果としてのポインタが生ポインタである必然性ってそうそう出会わなくない?
(有るなら具体例を示して貰えるととても有難い)
deleteだって言ってるからメモリアドレスを扱いたいのではなくヒープ確保の結果であるポインタとして話をするね
ライフタイム全部管理し切る自信があって、ムーブとか書くのがめんどくさいってんなら生ポでも良いと思う
ただ人間そんなに優秀じゃないので必然性に迫られない限りスマポ使う方が大多数には向いてるし、ヒープ確保の結果としてのポインタが生ポインタである必然性ってそうそう出会わなくない?
(有るなら具体例を示して貰えるととても有難い)
266デフォルトの名無しさん
2019/01/28(月) 15:30:59.26ID:3CrwaDYk 親玉クラスに任せられない時は、実体管理用のクラス作ってるわ。
何とかFactoryって。仮想クラスはオブジェクトスライシングを避けるためにも基本参照でしか使わん。
いい加減ガベコレつけろよ、と。
何とかFactoryって。仮想クラスはオブジェクトスライシングを避けるためにも基本参照でしか使わん。
いい加減ガベコレつけろよ、と。
267デフォルトの名無しさん
2019/01/28(月) 16:06:58.04ID:sZicpJ+d factoryがunique_ptrじゃだめな場面ってそんなに多いんですかね
268デフォルトの名無しさん
2019/01/28(月) 16:34:44.00ID:yOibm1qy そもそも boost や STL って、C++をC++でなくしてしまうことがある
奇妙で変なライブラリだ。
奇妙で変なライブラリだ。
269デフォルトの名無しさん
2019/01/28(月) 16:36:58.41ID:jKaiFfBH なんか、C++をスクリプト言語化したい人の集まりみたいになってる。
JS や Python みたいな書き方のまま、C++ の速度だけが得られることが
彼らの希望のように思える。
JS や Python みたいな書き方のまま、C++ の速度だけが得られることが
彼らの希望のように思える。
270デフォルトの名無しさん
2019/01/28(月) 17:00:48.06ID:6rt4c1kU 何言ってるんっだこいつ
271デフォルトの名無しさん
2019/01/28(月) 17:10:28.91ID:eIQ8PC4T そういう言語じゃないの?
The Real Stroustrup Interviewで
> I designed C++ so programmers could write code that is both elegant and efficient.
って言ってるけど
The Real Stroustrup Interviewで
> I designed C++ so programmers could write code that is both elegant and efficient.
って言ってるけど
272デフォルトの名無しさん
2019/01/28(月) 17:37:02.66ID:ehhV00bD273デフォルトの名無しさん
2019/01/28(月) 17:57:23.32ID:yOibm1qy >>271
Stroustrup の定義した C++ は結構美しかったんだよ。
boost と stl によってはものすごく汚くなった。
C++ 98 位でが本当の C++ で、それより後は C++ ではないと思う。
Stroustrup の定義した C++ は結構美しかったんだよ。
boost と stl によってはものすごく汚くなった。
C++ 98 位でが本当の C++ で、それより後は C++ ではないと思う。
274デフォルトの名無しさん
2019/01/28(月) 18:01:22.30ID:6rt4c1kU ぼくが考える最強のC++
275デフォルトの名無しさん
2019/01/28(月) 18:13:41.58ID:yOibm1qy 口だけ達者だからな。スクリプター達は。。。
276デフォルトの名無しさん
2019/01/28(月) 18:30:57.19ID:6rt4c1kU >>275
お前のことだぞ
お前のことだぞ
277デフォルトの名無しさん
2019/01/28(月) 18:32:51.86ID:sZicpJ+d278デフォルトの名無しさん
2019/01/28(月) 18:39:44.25ID:jKaiFfBH というか、スクリプターの方がバイナリ・プログラマより圧倒的に多いので
(スクリプト言語の方が習得が簡単なためだと考えられている)、
どうしたってこうなっちゃうな。
でもC++の厳格な書き方は、大きなプログラムを書くときには便利なんだけどね。
(スクリプト言語の方が習得が簡単なためだと考えられている)、
どうしたってこうなっちゃうな。
でもC++の厳格な書き方は、大きなプログラムを書くときには便利なんだけどね。
279デフォルトの名無しさん
2019/01/28(月) 18:40:38.89ID:6rt4c1kU ????
何を言ってるのか分からんのだが
何を言ってるのか分からんのだが
280デフォルトの名無しさん
2019/01/28(月) 18:42:34.38ID:ehhV00bD281デフォルトの名無しさん
2019/01/28(月) 18:45:57.76ID:tKT6HQoa 美しいとかそんなのどうでもいいんだよ!
C++ってのはなぁ、戦略爆撃機に例えるとB52なんだよ
基本設計は大昔すぎて今となっては古くさい
後付けでゴチャゴチャと魔改造やりすぎたせいで
今時の若造が見ると「なんでもっとスマートにできないのか」って言う
だがな、こいつは戦争の道具なんだ
たかがちんけな美学のために性能や機能は犠牲にしない
必要とあれば何でも貪欲に付けたしていくがそれは時代に迎合したいからではなく
仕事に必要だからやるだけだ
そんなプロフェッショナルのための戦争の道具、それがC++だ!
C++ってのはなぁ、戦略爆撃機に例えるとB52なんだよ
基本設計は大昔すぎて今となっては古くさい
後付けでゴチャゴチャと魔改造やりすぎたせいで
今時の若造が見ると「なんでもっとスマートにできないのか」って言う
だがな、こいつは戦争の道具なんだ
たかがちんけな美学のために性能や機能は犠牲にしない
必要とあれば何でも貪欲に付けたしていくがそれは時代に迎合したいからではなく
仕事に必要だからやるだけだ
そんなプロフェッショナルのための戦争の道具、それがC++だ!
282デフォルトの名無しさん
2019/01/28(月) 18:48:22.51ID:m1mrBSmH283デフォルトの名無しさん
2019/01/28(月) 19:15:51.56ID:E4+rgmE7284デフォルトの名無しさん
2019/01/28(月) 19:20:45.82ID:8pg5nSAS イミュータボォなヴァリューオブジェクトを実装するときにコピコン使うかスマポ使うか悩む
285デフォルトの名無しさん
2019/01/28(月) 19:46:05.45ID:zheEgWgK 例外安全性考えたらスマポ使わないでやるのは地獄
生ポとかいってるやつはどうせリークしまくりコード書いてるだろ
たとえ例外オフにしてたとしてもな
生ポとかいってるやつはどうせリークしまくりコード書いてるだろ
たとえ例外オフにしてたとしてもな
286デフォルトの名無しさん
2019/01/28(月) 19:56:32.74ID:ehhV00bD 何言ってんだこいつ
287デフォルトの名無しさん
2019/01/28(月) 20:02:46.72ID:s951gwaK スマポがなかった頃、僕はリークしまくりでしたっていう自己紹介文では?
288デフォルトの名無しさん
2019/01/28(月) 20:22:57.30ID:UJKy5wM0 aho ?
289デフォルトの名無しさん
2019/01/28(月) 20:28:40.03ID:zE5Bvtvg >>247
出来ましたーありがとうm(_ _)m
出来ましたーありがとうm(_ _)m
290デフォルトの名無しさん
2019/01/28(月) 21:27:20.71ID:jKaiFfBH291デフォルトの名無しさん
2019/01/28(月) 21:35:34.93ID:3CrwaDYk 流れを切って悪いが、コンセプトを使ってクラスを抽象化するのってありだと思う? 仮想関数のコストを払いたくないのが主な理由です。
これに関する指針とか本とかあったら教えてつかわさい。
これに関する指針とか本とかあったら教えてつかわさい。
292はちみつ餃子 ◆8X2XSCHEME
2019/01/28(月) 22:06:31.16ID:UMu6PPgN294デフォルトの名無しさん
2019/01/28(月) 22:23:20.84ID:ehhV00bD295デフォルトの名無しさん
2019/01/28(月) 22:27:46.35ID:zheEgWgK 例外安全性の困難さを知らないやつほど大口を叩く
296デフォルトの名無しさん
2019/01/28(月) 22:35:01.85ID:ehhV00bD お前の業界の話なんか知らんわ
例外使わない&リソース管理は一元化してる業種だってあるんだよボケ
自分が他人をけなしてるから自分もけなされてるってわかってるか?
例外使わない&リソース管理は一元化してる業種だってあるんだよボケ
自分が他人をけなしてるから自分もけなされてるってわかってるか?
297デフォルトの名無しさん
2019/01/28(月) 22:36:25.09ID:m1mrBSmH >>293
メモリー買い足してもダメ?
メモリー買い足してもダメ?
298デフォルトの名無しさん
2019/01/28(月) 22:39:50.87ID:6rt4c1kU >スマポが無いとリソース管理全く出来ないやつとかお断りだわ
ガチで障害者で草
ガチで障害者で草
299デフォルトの名無しさん
2019/01/28(月) 22:47:52.82ID:zheEgWgK リソース管理一元化の意味わかる人、解説頼む
スマポ使わない理由なのかそれ
スマポ使わない理由なのかそれ
300はちみつ餃子 ◆8X2XSCHEME
2019/01/28(月) 22:49:39.89ID:UMu6PPgN std::shared_ptr は、まあ速度的に不利になる場合もあるだろうけど、
std::unique_ptr を避ける理由って C++11 すら使えない環境の場合以外にはないと思うんだが、何かある?
std::unique_ptr を避ける理由って C++11 すら使えない環境の場合以外にはないと思うんだが、何かある?
301デフォルトの名無しさん
2019/01/28(月) 22:51:28.96ID:MUYIApjm302デフォルトの名無しさん
2019/01/28(月) 22:57:22.66ID:ehhV00bD >>300
そら管理責任を背負ってる部分では使えばいいけど、その一元管理されたリソースを使う側には
普通生ポか参照で渡すだろ
そういう場合にunique使う必要は無いし(unique_ptrの参照でも渡すのか?)
sharedにすると逆に管理責任が曖昧になる
特定のタイミングで一括でリソース確保、解放したいようなシステムを想像したらわかるかと
そら管理責任を背負ってる部分では使えばいいけど、その一元管理されたリソースを使う側には
普通生ポか参照で渡すだろ
そういう場合にunique使う必要は無いし(unique_ptrの参照でも渡すのか?)
sharedにすると逆に管理責任が曖昧になる
特定のタイミングで一括でリソース確保、解放したいようなシステムを想像したらわかるかと
303デフォルトの名無しさん
2019/01/28(月) 23:03:29.70ID:IwEPom0E どうせシーケンス図的なもん書かずに大きいプログラムは作らないと思うんだよね。
そうすると解放する場所も一目瞭然なのであまり必要性を感じない。
それに縛られないプログラムもあると思うけど、その場合得てしてC++は向いとらん。
そうすると解放する場所も一目瞭然なのであまり必要性を感じない。
それに縛られないプログラムもあると思うけど、その場合得てしてC++は向いとらん。
304デフォルトの名無しさん
2019/01/28(月) 23:04:18.01ID:6rt4c1kU そして人は神クラスを作る
305デフォルトの名無しさん
2019/01/28(月) 23:06:28.09ID:zheEgWgK 黙ってればよかったものをw
306デフォルトの名無しさん
2019/01/28(月) 23:08:56.84ID:EdRO7DHl >>300
使ってもいいけど、積極的に使いたくなる状況は意外と少ない
上の人も言ってるように親玉クラスとかスタックの上の方とか管理責任を持ってるところでは使いたければ使ってもいいけど、
そういうときはunique_ptr使わなくてもRAIIで勝手に解放されるでしょ
unique_ptrが本当に有効なのは所有権を他所に完全に引き渡してしまうケースだけど、
値を好んで多用する文化を持ちmoveも使えるC++において、そういうケースってわりとレアだと思う
使ってもいいけど、積極的に使いたくなる状況は意外と少ない
上の人も言ってるように親玉クラスとかスタックの上の方とか管理責任を持ってるところでは使いたければ使ってもいいけど、
そういうときはunique_ptr使わなくてもRAIIで勝手に解放されるでしょ
unique_ptrが本当に有効なのは所有権を他所に完全に引き渡してしまうケースだけど、
値を好んで多用する文化を持ちmoveも使えるC++において、そういうケースってわりとレアだと思う
307デフォルトの名無しさん
2019/01/28(月) 23:09:08.50ID:6rt4c1kU 歴史を再現してて尊い
308デフォルトの名無しさん
2019/01/28(月) 23:13:08.96ID:ehhV00bD309デフォルトの名無しさん
2019/01/28(月) 23:28:08.44ID:E4+rgmE7 所有権というのがいまいちわからんのだけどclassAがunique_pというデータを所有していたとして、他の関数からunique_pを参照して内容を書き換えるのは何も問題ないんだよな?
生成と破棄をまかせるだけという理解でok?
生成と破棄をまかせるだけという理解でok?
310デフォルトの名無しさん
2019/01/29(火) 00:00:27.39ID:2bsH4V/V >>308
unique_ptrについてぐくった?
unique_ptrについてぐくった?
311デフォルトの名無しさん
2019/01/29(火) 00:03:11.11ID:TJ0JKGHp312デフォルトの名無しさん
2019/01/29(火) 00:04:05.29ID:2bsH4V/V313デフォルトの名無しさん
2019/01/29(火) 00:05:28.12ID:2bsH4V/V 何やってもださいやつw
314デフォルトの名無しさん
2019/01/29(火) 00:19:10.99ID:TJ0JKGHp >>309
この場合所有権といえばそう。
この場合所有権といえばそう。
315デフォルトの名無しさん
2019/01/29(火) 00:21:22.57ID:ONcJDm6u >>312
RAIIしたいだけならunique_ptrがなぜ必要?
RAIIしたいだけならunique_ptrがなぜ必要?
316デフォルトの名無しさん
2019/01/29(火) 00:52:07.42ID:QzmnZttP 自動変数として宣言するには危険なぐらい巨大であるとか
他の構造体なりクラスなりにメンバとして埋め込むのが憚られるような
ばかでかい構造体やクラスを保持するのに使うと便利
この使い方に徹するなら所有権みたいな中途半端なブツで悩まずに済む
メンバをunique_ptrで保持するクラスはコンストラクタで例外が生じてもリークせずに済むおまけ付き
コンストラクタで例外など起こすなよというのは置くとして…
他の構造体なりクラスなりにメンバとして埋め込むのが憚られるような
ばかでかい構造体やクラスを保持するのに使うと便利
この使い方に徹するなら所有権みたいな中途半端なブツで悩まずに済む
メンバをunique_ptrで保持するクラスはコンストラクタで例外が生じてもリークせずに済むおまけ付き
コンストラクタで例外など起こすなよというのは置くとして…
317はちみつ餃子 ◆8X2XSCHEME
2019/01/29(火) 03:58:18.59ID:UoxCxtnm >>302 >>306
何も全部のポインタを置き換えるべしというわけじゃない。 所有権の管理に使う話。
下流には「アクセスを許す」のであって、「所有権を渡す」必要はないだろ。
(渡したい設計のときは渡せばいいが。)
可能なら一環してスマートポインタで扱うに越したことは無いとは思うが、
下流に渡すのは生ポインタにするという方針もそれはそれで悪くないと思う。
>>260 みたいなケースであっても、下流には生ポインタで渡すのであっても
スマートポインタは有用にはかわりないって話。
所有権の観点から見ると生ポインタってのは所有権を持っているか持っていないか
わからない状態ってことで、でも、その中に std::unique_ptr がひとつあれば、
それが後始末をするのだというサインになる。
所有権をどこで持っているのか見た目にわかるので、単純に、読みやすい。
もちろん、一旦生ポインタとして取り出したものをまたスマートポインタに入れたりすると
おかしなことになるのでそうしないように気を付ける必要はあるけど。
例外に対して気をつかうのはポインタを適切に扱うより冗長でつらいのでやりたくないってのもある。
何も全部のポインタを置き換えるべしというわけじゃない。 所有権の管理に使う話。
下流には「アクセスを許す」のであって、「所有権を渡す」必要はないだろ。
(渡したい設計のときは渡せばいいが。)
可能なら一環してスマートポインタで扱うに越したことは無いとは思うが、
下流に渡すのは生ポインタにするという方針もそれはそれで悪くないと思う。
>>260 みたいなケースであっても、下流には生ポインタで渡すのであっても
スマートポインタは有用にはかわりないって話。
所有権の観点から見ると生ポインタってのは所有権を持っているか持っていないか
わからない状態ってことで、でも、その中に std::unique_ptr がひとつあれば、
それが後始末をするのだというサインになる。
所有権をどこで持っているのか見た目にわかるので、単純に、読みやすい。
もちろん、一旦生ポインタとして取り出したものをまたスマートポインタに入れたりすると
おかしなことになるのでそうしないように気を付ける必要はあるけど。
例外に対して気をつかうのはポインタを適切に扱うより冗長でつらいのでやりたくないってのもある。
318デフォルトの名無しさん
2019/01/29(火) 04:01:02.14ID:NRuJsE/9 class A
{
Foo* pFoo;
public:
A(): pFoo(new Foo(42)) {}
A(A& other): pFoo(other.pFoo) { other.pFoo = nullptr; }
A& operator=(A& other) { std::swap(this->pFoo, other.pFoo); }
~A() { delete pFoo; }
};
class A
{
std::unique_ptr<Foo> pFoo;
public:
A(): pFoo(std::make_unique<Foo>(42)) {}
};
どっちが間違えにくいかなんて明白だろ
「俺は間違えない」「間違える低能が悪い」とか抜かす奴はソフト品質の勉強してくれ
{
Foo* pFoo;
public:
A(): pFoo(new Foo(42)) {}
A(A& other): pFoo(other.pFoo) { other.pFoo = nullptr; }
A& operator=(A& other) { std::swap(this->pFoo, other.pFoo); }
~A() { delete pFoo; }
};
class A
{
std::unique_ptr<Foo> pFoo;
public:
A(): pFoo(std::make_unique<Foo>(42)) {}
};
どっちが間違えにくいかなんて明白だろ
「俺は間違えない」「間違える低能が悪い」とか抜かす奴はソフト品質の勉強してくれ
319デフォルトの名無しさん
2019/01/29(火) 04:04:45.84ID:NRuJsE/9 あと自分の管理下のデータメンバーを参照するポインタをホイホイ外に渡したいだなんて
それカプセル化出来てない証拠だから
それカプセル化出来てない証拠だから
320デフォルトの名無しさん
2019/01/29(火) 08:17:54.67ID:ONcJDm6u321デフォルトの名無しさん
2019/01/29(火) 08:26:37.92ID:W2YyhY1O スマートポインタがそのRAIIの代表格なのだが
まさか自分で書けばいいから使わなくていいとか言いたいん?
まさか自分で書けばいいから使わなくていいとか言いたいん?
322デフォルトの名無しさん
2019/01/29(火) 08:33:39.21ID:6edJr3Gn ライブラリを使うのは甘え
323デフォルトの名無しさん
2019/01/29(火) 08:33:59.57ID:ONcJDm6u >>321
普通に直接値を持てばいいでしょ
それでカバーしにくい代表的なケースといえば
俺なら遅延初期化したいケースとか多態性を使いたいケースとかが真っ先に思いつくけど、
スマポ派からはそういう指摘が全然出てこなかったってことは実際それほど困らないことの何よりの証拠だなw
普通に直接値を持てばいいでしょ
それでカバーしにくい代表的なケースといえば
俺なら遅延初期化したいケースとか多態性を使いたいケースとかが真っ先に思いつくけど、
スマポ派からはそういう指摘が全然出てこなかったってことは実際それほど困らないことの何よりの証拠だなw
324デフォルトの名無しさん
2019/01/29(火) 09:02:42.51ID:a5ZxXHh2325デフォルトの名無しさん
2019/01/29(火) 09:22:48.30ID:C0E16yKU 初期化の遅延はoptionalがいるから用途として挙げるのは微妙なところ
17使えない場面自体は山ほどあるだろうけどさ
17使えない場面自体は山ほどあるだろうけどさ
326デフォルトの名無しさん
2019/01/29(火) 09:29:51.94ID:8dDk6Bea deleteの手間を惜しむならコメント書くのもやめればと思う
327デフォルトの名無しさん
2019/01/29(火) 09:31:27.97ID:KR1Oxil+ なんなのこの根性論w
便利なものは使えよ
ゼロコストじゃん
便利なものは使えよ
ゼロコストじゃん
328デフォルトの名無しさん
2019/01/29(火) 09:32:04.90ID:C0E16yKU deleteは手間じゃなくてリスクって認識なんですよね
自分を含めて人間を信用してないからdeleteを書かせない(スマポに任せる)
この文脈で人間を信用してないからコメントは書かせる
自分を含めて人間を信用してないからdeleteを書かせない(スマポに任せる)
この文脈で人間を信用してないからコメントは書かせる
329デフォルトの名無しさん
2019/01/29(火) 09:32:41.81ID:6edJr3Gn 30年前の議論してるな
330デフォルトの名無しさん
2019/01/29(火) 09:36:00.95ID:30IAnyu6 new/delete するかどうかの話と、 new/delete する場合にスマートポインタを使うかどうかの話とが
ごっちゃになってる人が居るように見えました。
ごっちゃになってる人が居るように見えました。
331デフォルトの名無しさん
2019/01/29(火) 09:39:36.81ID:8dDk6Bea deleteはもちろん人間が読むためのもんよ。
リソースの解放なんて副次的なもの。
リソースの解放なんて副次的なもの。
332デフォルトの名無しさん
2019/01/29(火) 09:58:45.15ID:KR1Oxil+ またえらいのがやって来たなw
333デフォルトの名無しさん
2019/01/29(火) 10:20:07.20ID:pTVW5tot メモリ解放程度ならお仕着せのスマポで簡単かもしれんけどさ
その他のリソース開放も重なると慎重になったほうがいいわ
どうせ別途開放処理書くなら一緒にポインターも解放したほうがコードの対称性もよくなってわかりやすい
しかしリソース開放漏れがOSレベルでしょっちゅう発生してるのなんとかせい
その他のリソース開放も重なると慎重になったほうがいいわ
どうせ別途開放処理書くなら一緒にポインターも解放したほうがコードの対称性もよくなってわかりやすい
しかしリソース開放漏れがOSレベルでしょっちゅう発生してるのなんとかせい
334デフォルトの名無しさん
2019/01/29(火) 13:13:48.58ID:JkAV6Qsd リソース開放漏れって、ロックされているの?それは悲しいな
■ このスレッドは過去ログ倉庫に格納されています
