次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1531558382/
このスレもよろしくね。
【初心者歓迎】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++相談室 part137
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 12c3-4saf)
2018/08/27(月) 16:02:00.94ID:vY3QDx2y0253はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 10:58:36.13ID:IzfX8EX20 実際のところ、インライン化されて更に他の最適化とコンボが起こったりすると
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。
254デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 11:15:06.66ID:c/F3wcvdM >>252
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ
このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ
このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい
255デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 12:11:07.39ID:uRta3OIBM intの場合は速度差は特に考慮しなくて良いんですねありがとうございます
それと、関数内でOpenCVで画像をゴニョゴニョして、結果の画像をリターンしたい場合は、どちらが良いのですかね?
特にメモリリークを起こしたくない(今現在起きてるので改善したい)ので、もし何か重大な違いがあるなら知りたいです
void hoge(cv::Mat x, cv::Mat ret){
ret = x + cv::Scalar(100);
}
cv::Mat hoge(cv::Mat x){
return x + cv::Scalar(100);
}
それと、関数内でOpenCVで画像をゴニョゴニョして、結果の画像をリターンしたい場合は、どちらが良いのですかね?
特にメモリリークを起こしたくない(今現在起きてるので改善したい)ので、もし何か重大な違いがあるなら知りたいです
void hoge(cv::Mat x, cv::Mat ret){
ret = x + cv::Scalar(100);
}
cv::Mat hoge(cv::Mat x){
return x + cv::Scalar(100);
}
256はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 13:28:43.07ID:IzfX8EX20 >>254
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。
多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。
多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。
257はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 13:34:38.93ID:IzfX8EX20 >>255
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?
258デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 13:53:20.00ID:c/F3wcvdM >>256
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ
259はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:06:16.01ID:IzfX8EX20260デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 14:09:29.47ID:c/F3wcvdM262はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:27:25.26ID:IzfX8EX20 >>255
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。
ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。
一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。
ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。
ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。
一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。
ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?
263はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:31:00.99ID:IzfX8EX20264デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 18:25:26.14ID:c/F3wcvdM >>263
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし
ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし
ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ
265はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 18:41:01.02ID:IzfX8EX20 >>264
そっちの脳内でどんな前提を置いてるかなんて知らんがな。
そっちの脳内でどんな前提を置いてるかなんて知らんがな。
266デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 19:48:52.61ID:c/F3wcvdM >>265
コテハンの割に薄いやつだ
もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない
それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ
このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ
コテハンの割に薄いやつだ
もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない
それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ
このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ
267デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/06(木) 20:12:24.70ID:64ZwjQvb0 malloc()したヒープはfree()解放するのは当然
ウンコしたあと水で流さないぐらい行儀が悪い
ウンコしたあと水で流さないぐらい行儀が悪い
268デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 20:23:27.14ID:itCyrIVk0 メモリーリークは基本的に自分でNEWすることで起こる。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。
そういう作法でやると、ユーザーコードでnewすることはほぼない。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。
そういう作法でやると、ユーザーコードでnewすることはほぼない。
269デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 20:47:20.81ID:itCyrIVk0 えーっと、関数にポインタを投げる時はその関数の仕様を精査して扱わないとほんとやばい。
270デフォルトの名無しさん (ワッチョイ ba34-uOrU)
2018/09/06(木) 21:04:04.33ID:bw6Oo6uj0 newとdeleteを使いこなせない補助輪付C++グラマってのも問題だけど
271デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:10:02.71ID:iyjSCMca0 スマポはGCじゃねえよ ぼけ
272デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:14:09.31ID:itCyrIVk0 shared_pointerは参照カウントっていうGC機構ですよ?
273デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:17:21.85ID:itCyrIVk0274デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:18:00.66ID:itCyrIVk0275デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:18:22.90ID:iyjSCMca0 CGってそもそも何だ?
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ
276デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/06(木) 21:20:24.16ID:64ZwjQvb0 いつ解放されるか分からないとか
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ
277デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:24:58.09ID:itCyrIVk0 >>275
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?
278デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:27:59.96ID:itCyrIVk0 それは全能でないとバグが出ちゃうのでこういう機構が発明されました。
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?
279デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:37:24.49ID:iyjSCMca0280デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:38:17.39ID:itCyrIVk0281デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:41:02.92ID:itCyrIVk0 >>279
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?
282デフォルトの名無しさん (ブーイモ MM97-A2Qj)
2018/09/06(木) 21:42:45.15ID:JT+LXegNM コレクションしてないのになんでgcなんだよ。アホすぎる
283デフォルトの名無しさん (ワッチョイ ba34-uOrU)
2018/09/06(木) 21:43:23.10ID:bw6Oo6uj0 シェアードはマルチタスクには不向きだし
284デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:49:40.12ID:itCyrIVk0 コレクションサイズが1のコンテナはないのですね。まぁ、冗談は置いといて。
物事を知ってるなら後は任せました。無知でごめんなさい。
物事を知ってるなら後は任せました。無知でごめんなさい。
285デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:51:04.10ID:itCyrIVk0 >>272
参照カウンタは普通GCに含めないのでは?
参照カウンタは普通GCに含めないのでは?
287デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:02:22.60ID:itCyrIVk0 https://ja.wikipedia.org/wiki/参照カウント
こういう記事を見つけました。
こういう記事を見つけました。
288デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:04:19.65ID:itCyrIVk0 ホントお前ら人殺すことばっか考えてるよな。
そういうのは良いから初心者殺すのマジやめて。
そういうのは良いから初心者殺すのマジやめて。
289デフォルトの名無しさん (ワッチョイ 27bd-A2Qj)
2018/09/06(木) 22:04:41.28ID:vgkXomJH0 gcの一実装として参照カウンタ方式があるだけで、スマポはgcじゃない。
290デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:06:33.66ID:itCyrIVk0 それならそれでいいです。
291デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/06(木) 23:18:28.17ID:8cSq8zHP0292デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 23:34:23.61ID:3bNAvGWPM293デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 23:34:43.07ID:itCyrIVk0 >>289
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
@参照カウンタが GC、故に、std::shared_ptr も GC
A参照カウンタが GC でない、故に、std::shared_ptr は GC でない
@Aのどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?
私は「参照カウンタは GC じゃない」と思う
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
@参照カウンタが GC、故に、std::shared_ptr も GC
A参照カウンタが GC でない、故に、std::shared_ptr は GC でない
@Aのどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?
私は「参照カウンタは GC じゃない」と思う
295デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/06(木) 23:48:27.91ID:8cSq8zHP0296デフォルトの名無しさん (ワッチョイ ef02-A2Qj)
2018/09/06(木) 23:52:47.61ID:HW23dE280 >>294
なにも矛盾してないよ。
GCの一実装として参照カウント方式を使ったものがある。
スマホの中に参照カウントを使ったものがある。
だからといってGC=スマポじゃない。
エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
なにも矛盾してないよ。
GCの一実装として参照カウント方式を使ったものがある。
スマホの中に参照カウントを使ったものがある。
だからといってGC=スマポじゃない。
エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
>>296
>エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
is-a の話の例えに has-a の話を使うのは論理的ではありませんね
「車 has エンジン、飛行機 has エンジン」の話と「参照カウンタ is GC、スマポ is GC」の話は別ですよ
>エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
is-a の話の例えに has-a の話を使うのは論理的ではありませんね
「車 has エンジン、飛行機 has エンジン」の話と「参照カウンタ is GC、スマポ is GC」の話は別ですよ
298デフォルトの名無しさん (ワッチョイ ef02-A2Qj)
2018/09/07(金) 00:12:24.59ID:YR0a2VfT0300はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 00:17:33.32ID:EL+7DMJm0 参照カウンタは GC だろ。
301はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 00:22:54.57ID:EL+7DMJm0 >>266
元々の質問はどちらが速いかではない。
元々の質問はどちらが速いかではない。
>>300
では std::shared_ptr も GC でしょうか?
では std::shared_ptr も GC でしょうか?
303はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 01:28:57.33ID:EL+7DMJm0 >>302
私は std::shared_ptr を GC だと思ってるよ。
解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識だけど。
基準の妥当性はともかくとして、とにかく私はそういう基準で考えてる。
QZ 氏の中で std::shared_ptr と GC を隔てるのは何だと思ってるの?
私は std::shared_ptr を GC だと思ってるよ。
解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識だけど。
基準の妥当性はともかくとして、とにかく私はそういう基準で考えてる。
QZ 氏の中で std::shared_ptr と GC を隔てるのは何だと思ってるの?
304デフォルトの名無しさん (ワッチョイ 13ea-OfLu)
2018/09/07(金) 02:17:04.39ID:obwFdGuS0 Qt5触ってみてるけど生ポインタばっか使ってて気持ち悪い、これでいいのか?
305デフォルトの名無しさん (ワッチョイ efd2-7GfT)
2018/09/07(金) 07:52:15.03ID:KDtg+GuV0 GC ⊇ shared_ptr
306デフォルトの名無しさん (ラクッペ MM3b-QWFi)
2018/09/07(金) 08:31:14.42ID:M/DU9wQ1M >>304
生は触って気持ちいいものしかないよ
生は触って気持ちいいものしかないよ
307デフォルトの名無しさん (JP 0He6-O+me)
2018/09/07(金) 11:18:53.99ID:f8oqes6vH parentクラスがあってそれを継承したchildクラスがあります。
vector<parent*> getParentlist(){//省略}でこんな感じでparentクラスのポインタのリストを返す関数があります。
それでここからが質問なのですが、
vector<child*> childList = (vector<child*>)getparentlist();
こういうコードがあってびっくりしています。
機能はしているみたいですがこれ作法的にオッケーなんでしょうか。
ダウンキャストは良くないと聞いていたりそもそもこれダウンキャストなのかとかちょっと分からないんです。
よろしくおねがいします。
vector<parent*> getParentlist(){//省略}でこんな感じでparentクラスのポインタのリストを返す関数があります。
それでここからが質問なのですが、
vector<child*> childList = (vector<child*>)getparentlist();
こういうコードがあってびっくりしています。
機能はしているみたいですがこれ作法的にオッケーなんでしょうか。
ダウンキャストは良くないと聞いていたりそもそもこれダウンキャストなのかとかちょっと分からないんです。
よろしくおねがいします。
308デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/07(金) 11:20:41.99ID:/+XJI6DP0 >>281
話が通じてないなあ。。。
デストラクタでuse_count見てるのは当たり前だろ
シェアードポインタの話だぜ?
解放のタイミングがアプリのロジックに従属してるかどうかって話なのに
何を言い出すかと思えば
話が通じてないなあ。。。
デストラクタでuse_count見てるのは当たり前だろ
シェアードポインタの話だぜ?
解放のタイミングがアプリのロジックに従属してるかどうかって話なのに
何を言い出すかと思えば
309デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/07(金) 12:35:44.17ID:KEvh9jix0 >>307
試せる限りのコンパイラではそもそもコンパイルエラーだったけどなぁ
vector<parent *> &getParentlist();
じゃなくて??
その上で
(vector<child *> &)getParentlist();
なら通るよ、通るし普通に使えるはず
試せる限りのコンパイラではそもそもコンパイルエラーだったけどなぁ
vector<parent *> &getParentlist();
じゃなくて??
その上で
(vector<child *> &)getParentlist();
なら通るよ、通るし普通に使えるはず
310デフォルトの名無しさん (JP 0He6-O+me)
2018/09/07(金) 13:23:59.20ID:f8oqes6vH >>309
失礼しました。ポインタ抜けてました
vector<parent*>* getParentlist(){//省略}
で
vector<child*>* childList = (vector<child*>*)getparentlist();
こんな感じです
失礼しました。ポインタ抜けてました
vector<parent*>* getParentlist(){//省略}
で
vector<child*>* childList = (vector<child*>*)getparentlist();
こんな感じです
311デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/07(金) 13:38:44.48ID:KEvh9jix0 おいおい・・・w
ポインタでも同じことだ、そのキャストをreinterpret_castだと考えたらわかるはず
それでわからないならC++の継承の仕組みを勉強すべき
ポインタでも同じことだ、そのキャストをreinterpret_castだと考えたらわかるはず
それでわからないならC++の継承の仕組みを勉強すべき
312はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 16:38:51.51ID:EL+7DMJm0 基底方向へのキャストの実態は
サブオブジェクトまでのオフセット分だけアドレスをずらす操作なので、
>>310 のような場合にはそれは実現できない。
単に無理やり型を合わせているだけになってしまっている。
C++ 的にはあかんやつ。
ただ、実際に動いている理由をあえて考察するなら、
child が parent を単一継承した場合などには parent が child の先頭に配置されるようなメモリレイアウトにコンパイルされる可能性が高く、
アドレスをずらす量が 0 で済んでしまうので
型を読み替えるだけでも不整合が顕在化せずに動作してしまうということは有りうる。
あくまでも、処理系がやってることが偶然に組み合わさって動いているというだけなので、やめといた方がよい。
サブオブジェクトまでのオフセット分だけアドレスをずらす操作なので、
>>310 のような場合にはそれは実現できない。
単に無理やり型を合わせているだけになってしまっている。
C++ 的にはあかんやつ。
ただ、実際に動いている理由をあえて考察するなら、
child が parent を単一継承した場合などには parent が child の先頭に配置されるようなメモリレイアウトにコンパイルされる可能性が高く、
アドレスをずらす量が 0 で済んでしまうので
型を読み替えるだけでも不整合が顕在化せずに動作してしまうということは有りうる。
あくまでも、処理系がやってることが偶然に組み合わさって動いているというだけなので、やめといた方がよい。
313デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/07(金) 17:46:14.93ID:KEvh9jix0 そこまでご丁寧に説明してやるのなら、「Cスタイルのキャストは使うな」、を教えるべきじゃねーの?
314デフォルトの名無しさん (ワッチョイ 1ee3-7bxL)
2018/09/07(金) 18:34:49.58ID:mMEjLB3K0 parent * が child * なのかも分からないのに強引にキャストするのか
そこまで型無視するなら void * でいいんじゃない 知らんけど
そこまで型無視するなら void * でいいんじゃない 知らんけど
316はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 20:57:32.70ID:EL+7DMJm0 C++ スタイルのキャストを、特に入門者の内は static_cast だけ使っておけばまあまあ大丈夫。
static_cast でエラーになるような変換は C++ 的にはだいたいイケてないやつ。
static_cast でエラーになるような変換は C++ 的にはだいたいイケてないやつ。
317デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/07(金) 20:59:50.93ID:/+XJI6DP0 アホか
dynamic_castが使えないくせに初心者皆伝なんぞやれん
dynamic_castが使えないくせに初心者皆伝なんぞやれん
>>303
>私は std::shared_ptr を GC だと思ってるよ。
…GC発祥の地 lisp の使い手のはちみつさんがそうおっしゃるのなら、私の中の定義も書き換えないといけませんね
mark and sweep GC って、プログラム本体とは関係のないところで、それこそメモリの死にビットをも使ったりして、ごそごそやる、というイメージがあります
>解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識
>std::shared_ptr と GC を隔てるのは何
「解放のタイミングを図る機構が表のプログラムとは独立している」
くらいでしょうか?表のプログラムからの参照が途切れることと free() されることに直接の関係性がない mark and sweep とその発展型のみを GC とみなしています
といって、GC の本は一冊しか持っていません
>私は std::shared_ptr を GC だと思ってるよ。
…GC発祥の地 lisp の使い手のはちみつさんがそうおっしゃるのなら、私の中の定義も書き換えないといけませんね
mark and sweep GC って、プログラム本体とは関係のないところで、それこそメモリの死にビットをも使ったりして、ごそごそやる、というイメージがあります
>解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識
>std::shared_ptr と GC を隔てるのは何
「解放のタイミングを図る機構が表のプログラムとは独立している」
くらいでしょうか?表のプログラムからの参照が途切れることと free() されることに直接の関係性がない mark and sweep とその発展型のみを GC とみなしています
といって、GC の本は一冊しか持っていません
319デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 22:36:10.40ID:OXR/kEGJ0 は○ち○餃子はLisperか
言語選びは慎重にな!
ttps://postd.cc/lisping-at-jpl/
言語選びは慎重にな!
ttps://postd.cc/lisping-at-jpl/
320はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 22:37:40.84ID:EL+7DMJm0 >>318
定義がひとつでなきゃならないとは思ってないよ。
だから自分なりに一貫した考え方があるのなら、それはそれでいいんじゃないかな。
ただ、「表の機構と分離されているか」という考え方だと、それは抽象化の仕方であって、メカニズム (アルゴリズム) の基準ではないね。
その基準だと std::shared_ptr が GC ではないとは言えても参照カウンタが GC ではないとは言えない。
定義がひとつでなきゃならないとは思ってないよ。
だから自分なりに一貫した考え方があるのなら、それはそれでいいんじゃないかな。
ただ、「表の機構と分離されているか」という考え方だと、それは抽象化の仕方であって、メカニズム (アルゴリズム) の基準ではないね。
その基準だと std::shared_ptr が GC ではないとは言えても参照カウンタが GC ではないとは言えない。
321デフォルトの名無しさん (スプッッ Sd3b-g95O)
2018/09/07(金) 22:45:54.86ID:Gz5E8uWmd お返事遅れました>>213です
Overlappedの設定をCreateNamedPipe時点に引数として渡す構造体ことで同期制御を実現できました
ありがとうございました
メモリリーク探しきつい....
Overlappedの設定をCreateNamedPipe時点に引数として渡す構造体ことで同期制御を実現できました
ありがとうございました
メモリリーク探しきつい....
322デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/07(金) 22:58:55.32ID:nLV7kBrTa すみません質問があります
メインスレッドと通信スレッドがいて、
通信スレッドはメインスレッドのオブジェクトポインタ持ってます
メインスレッドはクラス化されており、スレッド用のstatic関数以外にもメンバ関数を持っています
通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した時、
メインスレッドで実行していた処理はどうなるのでしょうか?
メインスレッドで実行していた処理はあくまでもstaticな関数の処理で、staticでない他のメンバ関数は別に処理されるのでしょうか?
メインスレッドと通信スレッドがいて、
通信スレッドはメインスレッドのオブジェクトポインタ持ってます
メインスレッドはクラス化されており、スレッド用のstatic関数以外にもメンバ関数を持っています
通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した時、
メインスレッドで実行していた処理はどうなるのでしょうか?
メインスレッドで実行していた処理はあくまでもstaticな関数の処理で、staticでない他のメンバ関数は別に処理されるのでしょうか?
323はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 23:04:25.63ID:EL+7DMJm0324デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/07(金) 23:21:53.12ID:nLV7kBrTa325デフォルトの名無しさん (ワッチョイ aa7e-7GfT)
2018/09/07(金) 23:22:52.89ID:RvuhpJx80 スレッドとメモリの関係がよく分かってないようだ
326デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:23:07.46ID:OXR/kEGJ0 微妙な質問キタ
327デフォルトの名無しさん (ワッチョイ efd2-7GfT)
2018/09/07(金) 23:23:45.59ID:KDtg+GuV0 解放のタイミングがコンパイル時に確定しないのは shared_ptr でも同じでしょ。
任意のshared_ptrインスタンスを別のインスタンスにコピーした場合、解放のタイミングはコンパイル時に確定できない。
任意のshared_ptrインスタンスを別のインスタンスにコピーした場合、解放のタイミングはコンパイル時に確定できない。
328デフォルトの名無しさん (ワッチョイ aa7e-7GfT)
2018/09/07(金) 23:25:23.60ID:RvuhpJx80 vectorがconstexpr対応できるならshared_ptrもできそう
329デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:26:09.70ID:B/yxkRYZ0 staticなメンバ関数ではstaticなメンバ変数しか参照できない
staticでないメンバ関数はstaticな変数もstaticでない変数も参照できる
staticなメンバ関数とstaticでないメンバ関数が作用しあうのであれば、
当然staticな変数になる
はっきりいってな
staticな変数はグローバル変数と同じだからな
とうぜん同じ実体の変数を参照することになる
staticでないメンバ関数はstaticな変数もstaticでない変数も参照できる
staticなメンバ関数とstaticでないメンバ関数が作用しあうのであれば、
当然staticな変数になる
はっきりいってな
staticな変数はグローバル変数と同じだからな
とうぜん同じ実体の変数を参照することになる
330デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:26:58.48ID:OXR/kEGJ0 >>329は視野が広い人じゃなかったのか!?
331デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:29:06.23ID:B/yxkRYZ0 > スレッド用のstatic関数以外にもメンバ関数を持っています
> 通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した
> 通信スレッドで呼び出した別のメンバ関数内でメンバ変数を変更した
まず低学歴知恵遅れは質問を読解する能力がない
> 通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した
> 通信スレッドで呼び出した別のメンバ関数内でメンバ変数を変更した
まず低学歴知恵遅れは質問を読解する能力がない
332デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:35:54.69ID:OXR/kEGJ0333はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 23:38:50.05ID:EL+7DMJm0 >>324
出来るが、データ競合が起こらないように気を付けよう。
出来るが、データ競合が起こらないように気を付けよう。
334はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 23:41:24.38ID:EL+7DMJm0 質問者が状況を理解してない説明をしてるから本当に回答になってるのかイマイチわからぬ。
無理に言葉にしようとせずにコードを示してくれた方がいいんだがなぁ。
無理に言葉にしようとせずにコードを示してくれた方がいいんだがなぁ。
335デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:41:30.87ID:B/yxkRYZ0 バカじゃなければ
普通にアドレスが固定されてるstaticなメンバ関数のアドレスを
スレッドを開始させるアドレスにしてると推定できるからな
普通にアドレスが固定されてるstaticなメンバ関数のアドレスを
スレッドを開始させるアドレスにしてると推定できるからな
336デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:46:20.44ID:B/yxkRYZ0 このスレのバカどもはスレッドなんか
なんも分かってないからな
質問するヤツもバカになにを聞いてもムダだからな
そこの理解は必要
なんも分かってないからな
質問するヤツもバカになにを聞いてもムダだからな
そこの理解は必要
337デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:56:01.03ID:OXR/kEGJ0338デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:58:34.82ID:B/yxkRYZ0 > 通信スレッドはメインスレッドのオブジェクトポインタ持ってます
まず一番最初に書いてることが読めてない
致命的な頭のワルサといっていい
まず一番最初に書いてることが読めてない
致命的な頭のワルサといっていい
339デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:00:18.18ID:j/6nk0eH0 普通にメインスレッドのメンバ関数呼び出して
メインスレッドのメンバ変数を変更すると読めるからな
こんだけコミュニケーションレベルが低いと
実生活でも支障があるレベルといっていい
メインスレッドのメンバ変数を変更すると読めるからな
こんだけコミュニケーションレベルが低いと
実生活でも支障があるレベルといっていい
340デフォルトの名無しさん (ワッチョイ daf9-FJXj)
2018/09/08(土) 00:03:28.41ID:VqyCCBP80 >>330
半角クンは自分の見たいものしか見えない、すなわち常に半角クンの中ではすべてのものを見通している視野100%ということなのだろう
半角クンは自分の見たいものしか見えない、すなわち常に半角クンの中ではすべてのものを見通している視野100%ということなのだろう
341デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/08(土) 00:04:14.21ID:49ssh0n4a342デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:06:40.10ID:j/6nk0eH0 まずなこのスレの低学歴知恵遅れたちは
自分たちがどんだけ低学歴知恵遅れかという自覚がない
致命的といっていい
自分たちがどんだけ低学歴知恵遅れかという自覚がない
致命的といっていい
343デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 00:18:54.01ID:6MRSNGru0344デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:20:24.81ID:j/6nk0eH0 また低学歴知恵遅れが負け惜しみ意味不明なこといってるしな
低学歴知恵遅れの負けず嫌いは異常だからな
低学歴知恵遅れの負けず嫌いは異常だからな
345デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:22:38.67ID:j/6nk0eH0 低学歴知恵遅れほど自尊心だけは高い
コレは底辺に多い
そして自分がゴミクズの低学歴知恵遅れである自覚もない
つまり救いようがない
コレは底辺に多い
そして自分がゴミクズの低学歴知恵遅れである自覚もない
つまり救いようがない
346デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:30:51.48ID:j/6nk0eH0 低学歴知恵遅れの底辺ゴミクズほど自己評価だけは高い
その根拠のない自己評価の高さは
どこからくるものなかははっきりとは分からない
低学歴知恵遅れの底辺ゴミクズほどそういう傾向がある
それは経験からかなり相関が高いと確信している
その根拠のない自己評価の高さは
どこからくるものなかははっきりとは分からない
低学歴知恵遅れの底辺ゴミクズほどそういう傾向がある
それは経験からかなり相関が高いと確信している
みなさん厳しいですね…
私は質問側ですが、そして今 schme スレで質問を丸投げしちゃっていますが、わからないときは、なにがわからないかわからない、という感じだったりしています
>>324
なにか断片的でいいからコード例をあげていただくと嬉しいです、例えば https://ideone.com/VvdMRl
私は質問側ですが、そして今 schme スレで質問を丸投げしちゃっていますが、わからないときは、なにがわからないかわからない、という感じだったりしています
>>324
なにか断片的でいいからコード例をあげていただくと嬉しいです、例えば https://ideone.com/VvdMRl
348デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:45:27.68ID:j/6nk0eH0 むしろこのスレの低学歴知恵遅れの底辺ゴミクズたちは
質問してるヤツのレベルにすら到達してない
質問してるヤツのレベルにすら到達してない
349デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/08(土) 00:46:44.54ID:49ssh0n4a350デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 01:03:30.65ID:6MRSNGru0351デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 01:10:28.57ID:6MRSNGru0352デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/08(土) 01:32:58.78ID:LCjnyCTn0 >>351
よろしければ教えていただけますか?
>20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たした
メモリバリアって要するに x86 の lfence, sfence, mfence のことですか?
これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?
よろしければ教えていただけますか?
>20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たした
メモリバリアって要するに x86 の lfence, sfence, mfence のことですか?
これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 中国側が首相答弁の撤回要求、日本側拒否★5 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 解体ごみ約2.3トンを山に不法投棄か トルコ国籍解体工を逮捕 埼玉 [どどん★]
- 【悲報】ファブル「━━━書かれた文面を読むだけの岸田と違って、高市は決断力や行動力があり、自分で責任を取れる。 [257926174]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
- 【悲報】高市総理モノマネにとろサーモン久保田がブチギレ。「しょーもない。高市さんは頑張ろうとしてるやろ」😮 [518915984]
- 【悲報】「やったー!こだわりまくった洋館仕立ての家を建てたぞ!」➡「「離婚したんで住まずに売ります……」 [158478931]
- 精神する時の🏡
- 【画像】日本のリン肥料、7割が中国だった!レアじゃないアースを禁輸されただけて餓死へ [347751896]
