前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/
探検
C++相談室 part157
■ このスレッドは過去ログ倉庫に格納されています
2021/08/09(月) 10:57:31.60ID:JaaB5Egp
2デフォルトの名無しさん
2021/08/09(月) 11:24:40.26ID:M3I2CbwW2021/08/09(月) 11:43:30.76ID:GC6B710d
>スレッドが実行中か確認したいってどんなときなのかな?
たとえばゲームでセーブするとき、
メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す
みたいな時かな
たとえばゲームでセーブするとき、
メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す
みたいな時かな
2021/08/09(月) 11:48:24.98ID:OWI9S7jW
2021/08/09(月) 11:56:53.44ID:GC6B710d
>>4
もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ
もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ
2021/08/09(月) 12:12:57.14ID:GC6B710d
>>4,5
あぁ、いやそうじゃないか
ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、
ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、
その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽だからw
あぁ、いやそうじゃないか
ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、
ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、
その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽だからw
2021/08/09(月) 12:17:21.54ID:qYrd5+ip
この「実行中」が実際にタイムスライスが割り当てられている状態を意味しているんであれば
OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。
>>4であればjoinableで十分だろうし。
OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。
>>4であればjoinableで十分だろうし。
2021/08/09(月) 12:25:08.93ID:DVzh2mox
別スレッド処理の進捗を他スレッドから閲覧するためのパラメータを使っってる時点で、お察し
2021/08/09(月) 12:40:21.77ID:S8n0VVLE
前スレ997は色々勘違いしてそうな気がする
普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする
pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない
普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする
pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない
2021/08/09(月) 13:35:16.98ID:eF2Q2UUf
std::condition_variable
11ハノン ◆QZaw55cn4c
2021/08/09(月) 13:52:46.20 正直いって pthread の条件変数は私には理解が難しく、私は安易に win32api のクリティカルセッション&シグナルを多用してしまうのです
ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥
ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥
2021/08/09(月) 14:01:28.39ID:TRAo/ccI
>>2
別に
Producer(pushする側)がこれからpushするのを待っている場合、
Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても
Producerが待っているのかどうかの情報を得られない
なぜなら、まだpushしていないからな
別に
Producer(pushする側)がこれからpushするのを待っている場合、
Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても
Producerが待っているのかどうかの情報を得られない
なぜなら、まだpushしていないからな
2021/08/09(月) 14:14:45.62ID:TRAo/ccI
2021/08/09(月) 14:32:36.91ID:JaaB5Egp
2021/08/09(月) 14:33:19.09ID:S8n0VVLE
>>13
いや、スレッドの実行状態なんて見てもしゃーないって話
pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん
要するにスレッドの実行状態の変化は排他制御できないから意味がないって話
pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw
いや、スレッドの実行状態なんて見てもしゃーないって話
pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん
要するにスレッドの実行状態の変化は排他制御できないから意味がないって話
pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw
2021/08/09(月) 14:34:07.65ID:aCXIbwxy
std::vectorの部分ベクトルの切り出しって絶対O(要素数)の計算量かかりますよね?
2021/08/09(月) 14:40:14.51ID:fi8SjIox
「部分ベクトルの切り出し」とは何かを定義せよ。
2021/08/09(月) 14:47:54.30ID:eF2Q2UUf
こういうの?
std::vector<int> a{ 4, 6, 4, 9 };
std::vector<int> b(a.begin() + 1, a.begin() + 2);
std::vector<int> a{ 4, 6, 4, 9 };
std::vector<int> b(a.begin() + 1, a.begin() + 2);
2021/08/09(月) 15:11:52.58ID:KzU8BZnC
参照できればいいのか、コピーがいるのか、切り出し位置はわかってるのか、検索を伴うのか、
その辺の条件もなしに計算量の議論なんて出来んわ
その辺の条件もなしに計算量の議論なんて出来んわ
2021/08/09(月) 16:11:11.49ID:6v1cUfUr
クラスAの内部にクラスBがある (入れ子クラス) として、BからAのメンバにアクセスするテクってないんですかね?
アクセスしたいメンバをstaticにはしたくないです
アクセスしたいメンバをstaticにはしたくないです
2021/08/09(月) 16:20:25.36ID:GC6B710d
>>20
AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?
AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?
22はちみつ餃子 ◆8X2XSCHEME
2021/08/09(月) 16:48:43.56ID:OWI9S7jW >>20
クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。
B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。
A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。
関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。
よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。
クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。
B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。
A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。
関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。
よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。
2021/08/09(月) 16:52:51.13ID:S8n0VVLE
2021/08/09(月) 16:59:35.77ID:eF2Q2UUf
2021/08/09(月) 17:00:48.11ID:hJGoZPOe
絶対レビュー通らないウンココードでよいなら
(char*)this + offsetof(A, b)でなんとかならんのか
(char*)this + offsetof(A, b)でなんとかならんのか
2021/08/09(月) 17:33:38.90ID:GC6B710d
class Aをtemplate化して、class BでAを継承すれはメンバにはアクセスできるけど、たぶんそういうことがしないんじゃないんだろうなw
コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?
コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?
2021/08/09(月) 17:48:31.00ID:eF2Q2UUf
リファレンサを作るときなんか親オブジェクトへのポインタ使うね
2021/08/09(月) 20:07:17.09ID:XVy1LhuX
2021/08/10(火) 00:55:38.92ID:rk6SLsdN
親オブジェクトへのポインタをうっかり共有ポインタにすると循環参照の原因になる(小並感)
2021/08/10(火) 03:53:30.08ID:mPLpHQ1a
+=の引数が1のときは++を呼ぶようにする方法ってありますか
2021/08/10(火) 08:16:11.83ID:JssHBcjd
2021/08/10(火) 12:11:16.71ID:OMlKC5pQ
TCPIPのソケット通信プログラム作ろうと思っているのですが、
コネクションを維持し続ける場合のデメリットって何がありますか?
コネクションを維持し続ける場合のデメリットって何がありますか?
2021/08/10(火) 12:42:43.27ID:ZRv1Vy3I
>>32
後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています
それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく +=1 で行われるようになります
で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです
omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います
ありがとうございました
後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています
それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく +=1 で行われるようになります
で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです
omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います
ありがとうございました
2021/08/10(火) 14:57:46.78ID:W7aMf5pX
マルチスレッドのキューのサンプルをSTLで作りゃったーしたったわ、
https://ideone.com/bS7rqc
↓ここのC#のサンプルプログラムの移植
// https://atmarkit.itmedia.co.jp/ait/articles/1801/31/news023.html
フラグの必要性は意味を取り違えていたわサーセン、
しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが
join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお
フラグで済むのに、
https://ideone.com/bS7rqc
↓ここのC#のサンプルプログラムの移植
// https://atmarkit.itmedia.co.jp/ait/articles/1801/31/news023.html
フラグの必要性は意味を取り違えていたわサーセン、
しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが
join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお
フラグで済むのに、
2021/08/10(火) 15:21:27.23ID:W7aMf5pX
Windowsのイベントオブジェクトと条件変数の違いまとめ
https://dev.activebasic.com/egtra/2011/09/19/413/
https://dev.activebasic.com/egtra/2011/09/19/413/
2021/08/10(火) 15:28:07.54ID:W7aMf5pX
と思ったがやっぱ当初の意味(Producerが待っているのかどうか)のフラグが無いと、
キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、
巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;;
やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない
漏れは天才なのかもしんない、
かもしんない運転、
キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、
巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;;
やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない
漏れは天才なのかもしんない、
かもしんない運転、
2021/08/10(火) 18:25:35.80ID:W7aMf5pX
つかその前に、漏れの天才eyesが改造元とした@IT様のサンプルプログラムに
スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、
論より証拠:
https://ideone.com/NbKdEQ
変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ
(マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所
これでConsumerスレッドが終了できなくなる
対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい
天才の判断である
スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、
論より証拠:
https://ideone.com/NbKdEQ
変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ
(マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所
これでConsumerスレッドが終了できなくなる
対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい
天才の判断である
2021/08/10(火) 18:42:35.68ID:mYAwPqTL
>>34
すみません。この件なんですが、
void operator += (int n){
if(n == 1){
// ここ
}else{
……
}
}
「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか
++の中身をコピペしても良いのですが、
this -> ++
みたいなノリで呼び出せた方が都合が良いです
すみません。この件なんですが、
void operator += (int n){
if(n == 1){
// ここ
}else{
……
}
}
「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか
++の中身をコピペしても良いのですが、
this -> ++
みたいなノリで呼び出せた方が都合が良いです
2021/08/10(火) 19:06:35.71ID:W7aMf5pX
というわけで最終的な版を貼る、
https://ideone.com/G3XeAg
ProduceとConsumerそれぞれに対する起床条件を分離すた、
日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
https://ideone.com/G3XeAg
ProduceとConsumerそれぞれに対する起床条件を分離すた、
日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
2021/08/10(火) 19:11:32.09ID:cMFKuo8t
2021/08/10(火) 19:24:28.15ID:mYAwPqTL
2021/08/10(火) 19:37:16.72ID:Lbev+Y0v
>>40
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
2021/08/10(火) 20:32:27.09ID:W7aMf5pX
2021/08/10(火) 21:01:08.35ID:Lbev+Y0v
>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
2021/08/10(火) 22:11:54.85ID:W7aMf5pX
なんか元にしたコードにまだ問題があった気配orz
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、
>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える
言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、
>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える
言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、
2021/08/10(火) 22:25:26.70ID:W7aMf5pX
でもまあコメントを読んでいただければ、pthread系のしくみだと
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
2021/08/10(火) 22:47:59.90ID:C0wcAbjz
すみません。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
2021/08/10(火) 23:06:02.90ID:OOQ3UOoB
2021/08/10(火) 23:24:57.75ID:C0wcAbjz
ソースはすみません、ちょっと出せないです
エラーコードは0xc0000005でしま
エラーコードは0xc0000005でしま
2021/08/10(火) 23:30:51.53ID:OOQ3UOoB
はいメモリアクセス違反ですね
デバッガでがんばって調べてね
デバッガでがんばって調べてね
2021/08/10(火) 23:32:41.60ID:C0wcAbjz
あざす
53デフォルトの名無しさん
2021/08/10(火) 23:34:52.75ID:5fGESjxl 他の言語にはスレッド実行中か判定するAPIあるしstd::thread作った人達だってそのくらいのこと知ってたでしょ
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
2021/08/10(火) 23:44:13.15ID:rk6SLsdN
スレッドそのものの終了状態を知る需要はあまりなく、スレッド内で行われるユーザー定義処理が終わったかどうかが重要だからでしょ
2021/08/10(火) 23:50:54.98ID:Lbev+Y0v
>>47
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
2021/08/11(水) 01:24:38.33ID:qkzYmFIh
2021/08/11(水) 01:28:13.23ID:qkzYmFIh
問題だらけだった@IT様のサンプルコードだけど
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……
でここまでやるならConsumerの状態変数が実体としてコードに現れる
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……
でここまでやるならConsumerの状態変数が実体としてコードに現れる
2021/08/11(水) 01:44:51.77ID:01hIEDa4
何を主張したくてごちゃごちゃ言ってるのかさっぱり見えないし途中で変わったりしてるようでもあるので、
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
2021/08/11(水) 08:13:22.18ID:SyYdmIb8
60デフォルトの名無しさん
2021/08/11(水) 09:56:36.95ID:8ERcfmko C++ってiPhoneアプリ作れる?
2021/08/11(水) 12:11:01.26ID:sOdrsbt7
>>60
作れる。QtやUnityで。
作れる。QtやUnityで。
2021/08/11(水) 12:13:04.52ID:sOdrsbt7
iPhone専用でいいなら、そもそも、Appleが提供している標準開発環境だけでも
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
63デフォルトの名無しさん
2021/08/11(水) 12:52:41.17ID:MU7UJMps std::vector で insert するとき
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
2021/08/11(水) 13:03:37.14ID:19rzwYjH
22.3.11 Class Template vector
23.3.11.1 Overview
3
using iterator = implementation-defined; //see 22.2
となっていて、std::vector::iteratorの型は処理系定義だね
現物で調べるならVisual Studioの[F12]が簡単だと思う
23.3.11.1 Overview
3
using iterator = implementation-defined; //see 22.2
となっていて、std::vector::iteratorの型は処理系定義だね
現物で調べるならVisual Studioの[F12]が簡単だと思う
2021/08/11(水) 14:01:06.77ID:OqxISI0I
2021/08/11(水) 14:15:21.29ID:EWMgwFeS
std::thread使ったことないから自信無くて黙ってたけど
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
2021/08/11(水) 14:23:39.88ID:01hIEDa4
>>63
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
2021/08/11(水) 14:56:54.71ID:OqxISI0I
69デフォルトの名無しさん
2021/08/11(水) 15:08:15.20ID:MU7UJMps2021/08/11(水) 15:28:09.46ID:EWMgwFeS
2021/08/11(水) 15:29:37.31ID:EWMgwFeS
>>69
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
72はちみつ餃子 ◆8X2XSCHEME
2021/08/11(水) 15:43:43.66ID:QcAq7ivU >>69
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
2021/08/11(水) 15:52:06.26ID:SyYdmIb8
2021/08/11(水) 15:54:21.05ID:19rzwYjH
>>71
そういうこと
そういうこと
75デフォルトの名無しさん
2021/08/13(金) 02:38:58.72ID:tLa9gek2 char *mystrcat(char *a, char *b)
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
}
みたいな実装にするとき参照カウンタが無限に増える心配はありますか?
shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b)
の方が良いのでしょうか?
あと
hoge = mystrcat(NULL, hage); みたいに使用されるときは
mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
}
みたいな実装にするとき参照カウンタが無限に増える心配はありますか?
shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b)
の方が良いのでしょうか?
あと
hoge = mystrcat(NULL, hage); みたいに使用されるときは
mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
2021/08/13(金) 02:56:15.88ID:nopi39s7
>>75
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
2021/08/13(金) 09:51:25.31ID:BE9FMbqU
個別の事例で心配ない、問題ないという返答を得たとしても理解が深まらない。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
2021/08/13(金) 11:40:57.21ID:UG8FRdqC
char *mystrcat(char *a, char *b)
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
2021/08/13(金) 14:30:41.36ID:vEVo7A6C
適当な質問者と適当な回答者
ゴミとゴミをあわせてもゴミはゴミ
ゴミとゴミをあわせてもゴミはゴミ
2021/08/13(金) 18:27:35.00ID:tLa9gek2
shared_ptr<char []> c(a);
return &c[0];
return &c[0];
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★6 [BFU★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★7 [BFU★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 高市首相が異例の“買春行為の罰則化の検討”に言及…世界では“買う側”に罰則を科すのが先進国のスタンダード ★2 [樽悶★]
- 【サッカー】U-17W杯 日本代表、無念のベスト8敗退… チャンスは多く作ったが仕留め切れず オーストリアに0-1で敗戦 [冬月記者★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ158
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ157
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- ガンダムって結局どういう話なの?
- NHKニュースウオッチ9「日本側は対話にオープンな姿勢で安定した日中関係を築きたい考えなのに中国が意固地で糸口が見いだせない」 [904151406]
- 【ぺこ専🐰】なんG 兎田ぺこら突発配信実況スレ🏡【ホロライブ▶】
