我有以下代码:
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
复制构造函数,因为对原始字符串的更改并没有更改副本。
谁能向我解释为什么它没有制作平面副本?
我正在使用带有 GCC 4.4.6 的 Linux。