私はC++に比較的慣れていないので、次の場合に構造体がコピーされるかどうか疑問に思っています:
struct foo {
int i;
std::vector<int> bar;
}
class Foobar {
foo m_foo;
void store(foo& f) {
this->m_foo = f;
}
}
void main() {
Foobar foobar;
{
foo f;
f.i = 1;
f.bar.insert(2);
foobar.store(f);
}
// will a copy of f still exist in foobar.m_foo, or am I storing a NULL-Pointer at this point?
}
私がこれを尋ねている理由は、私が元々 .NET 開発者であり、.NET 構造体を関数に渡すとコピーされる (そしてクラスはコピーされない) ためです。store が参照によって f を取るように宣言されていない場合、コピーされると確信していますが、このコードを変更することはできません。
編集:vector.insert
私の質問に影響を与えるとは知らなかったので、コードを更新しました。私の場合、構造体をベクトルではなくクラスのメンバーとして保存します。だから私の質問は本当に:f
にコピーされthis->m_foo = f;
ますか?