私はC++を使い始めたばかりで(私は経験豊富なPython / Java開発者であり、OpenCLのより良い部分に取り組んでいます)、オブジェクトが関数に渡される方法に非常に混乱しています。
簡単なクラスがあるとしましょう。
class Thing {
int var;
int var2;
int var3;
void doSomething();
};
現在、このクラスの「サイズ」は少なくとも3*sizeof(int)
です(関数ポインタが格納されているかどうかはわかりません)。ここで、2つの関数シグネチャがあるとします。
void doThing1(Thing t);
void doThing2(Thing* t);
を呼び出すとdoThing1
、インスタンス全体がスタックにコピーされますか?を呼び出すと、スタックスペースdoThing2
のみが必要ですか?sizeof(Thing*)
インターネット上にある多くの「従来の知識」は、の関数シグネチャを使用するように私に言ってきましたdoThing1
が、一見すると非常にばかげているように見えます-それが実際にオブジェクト全体をコピーする場合。
また、関数が(new
キーワードで作成された)ヒープ上にあるオブジェクトを変更しようとしている場合、それはのように見えるはずだと思いdoThing1
ます。
私の無知を正してください。私のGoogle検索が役に立たないか、Googleが役に立たないかのどちらかです。