私は次のコードを持っています:
class TestClass
{
public:
TestClass(){};
std::string GetTestString()
{
return (mTestString);
}
void SetTestString(const std::string& rTestString)
{
mTestString = rTestString;
}
private:
std::string mTestString;
};
TestClass* pGlobalVar;
void SomeFunction(TestClass MyClass)
{
pGlobalVar->SetTestString("cba");
std::cout << "Changed string: " << pGlobalVar->GetTestString() << std::endl;
std::cout << "Copied string: " << MyClass.GetTestString() << std::endl;
}
int main()
{
pGlobalVar = new TestClass();
pGlobalVar->SetTestString("abc");
std::cout << "Original string: " << pGlobalVar->GetTestString() << std::endl;
SomeFunction(*pGlobalVar);
delete (pGlobalVar);
}
これにより、次のように出力されます。
元の文字列:abc 変更された文字列:cba コピーされた文字列:abc
クラスのコピーコンストラクターを定義しなかったので、ポインターを含むフラットコピーが作成されることを期待しますstd::string
。どうやらstd::string
コピーコンストラクタが使用されていますが、元の文字列を変更してもコピーは変更されなかったためです。
フラットコピーを作成しなかった理由を誰かに説明してもらえますか?
LinuxとGCC4.4.6を使用しています。