07/04/22 13:35:11
頻繁に使う構造体なら継承してコンストラクタ定義してしまえってじっちゃんが
562:デフォルトの名無しさん
07/04/22 13:44:51
レガシーAPIに渡せないだろ
563:デフォルトの名無しさん
07/04/22 13:49:12
こっちで変数定義したものを向こうへ渡すのなら、
アップキャスト(ポインタ・参照渡し)・スライシング(値渡し)が起こるだけで、
言語規格上問題ないだろ。
向こうでオブジェクトが作成され、自分はそれへのポインタを受け取るという場合に
派生クラスへのポインタで受けたら、言語規格上未定義にはなるだろうけどさ。
564:552
07/04/22 15:30:50
>>560
そうなのか、memが初めなのか
脳内では、セット麺、麺セット、麺コピーって変換してた
565:デフォルトの名無しさん
07/04/22 16:13:33
>>562
VC++ の CRect は RECT を継承したクラスなんだぜ。
でも、レガシーAPIに渡せるだろ?
仮想関数がないからな。
566:デフォルトの名無しさん
07/04/22 16:25:18
>>565
仮装関数は関係ないだろ
567:デフォルトの名無しさん
07/04/22 16:25:32
>>565
ちゃうちゃう。
CRectはRECTを継承してない。内部の最初に保持してるだけ。
is-aじゃなくてhas-aの関係
同様の方法でWinAPI32に引き渡せるMFCクラスあるでよ。
568:デフォルトの名無しさん
07/04/22 16:27:37
>>567
CRectはRECTを継承しているよ
569:567
07/04/22 16:29:52
>>565
ああ、ゴメン俺のまちがいだった。RECTの継承でよかったわ。
570:デフォルトの名無しさん
07/04/22 17:34:42
レガシーAPIに渡せるってわざわざ自分で&付けてるのかよwwww
変換演算子あるんだから使えよカスwwwwww
571:デフォルトの名無しさん
07/04/22 18:06:24
( ´д)ヒソ(´д`)ヒソ(д` )
572:デフォルトの名無しさん
07/04/22 18:06:58
>>566
ああ、そうだ。関係なかった。すまん。
573:デフォルトの名無しさん
07/04/22 18:24:12
構造体をmallocしたときは初期化はどうしたらいい?
1.気にせずmemset
2.最近のmallocはゼロクリア保障なのでそれを信じる
3.地味に全部真面目に設定
574:デフォルトの名無しさん
07/04/22 18:32:22
>>573
Cなんだよな。
1.自作の構造体で間違いないのならおk
2.保証されてるかどうかちゃんとCユーザーズマニュアルを見れ
3.一番安全
575:デフォルトの名無しさん
07/04/22 18:32:32
一方ロシアはcallocを使った
576:デフォルトの名無しさん
07/04/22 18:32:57
> 最近のmallocはゼロクリア保障
大嘘を付くな
577:デフォルトの名無しさん
07/04/22 18:41:35
>>576
え、いや、ウソじゃないです。ごめんなさい。うそじゃないです。
578:デフォルトの名無しさん
07/04/22 18:55:40
>>573
>最近のmallocはゼロクリア保障なのでそれを信じる
ってホントなの?どういう環境での話?
main() {
for(;;) {
struct { int i; } *s = malloc(sizeof *s);
assert(s->i == 0);
}
}
すぐに死ぬけど
579:デフォルトの名無しさん
07/04/22 19:05:37
0 クリア保証してるのは calloc だろ。
580:デフォルトの名無しさん
07/04/22 20:38:22
VC++2005で見た限りはvirtual関数があるとサイズが増えてるね。
#include <stdio.h>
struct TEST1 { int x; int y; };
struct TEST2 { int x; int y; void setXY(int x, int y) { this->x = x; this->y = y; }};
struct TEST3 { int x; int y; virtual void setXY(int x, int y) { this->x = x; this->y = y; }};
int main() { printf("%d %d %d\n", sizeof(TEST1), sizeof(TEST2), sizeof(TEST3)); return 0; }
結果
8 8 12
581:デフォルトの名無しさん
07/04/22 21:05:10
>580
だから?