Bri*_*ian 1 c++ constructor copy const reference
当我将一个对象作为const引用传递给另一个对象时,是否有副本?我总是假设,因为我通过引用传递了对象,成员对象本身实际上是我传入的对象而不是副本.我做了一个测试程序,导致传入的引用对象在范围的末尾被销毁,但它没有像我预期的那样崩溃.这是一个等待发生的错误还是被复制的对象?
#include <iostream>
#include <string>
class Something
{
public:
Something(const std::string& str) : mStr(str) {}
const std::string& str() const
{
return mStr;
}
private:
std::string mStr;
};
int main()
{
Something* something;
{
std::string temp = "Testing.";
something = new Something(temp);
}
std::cout<<something->str()<<"\n";
delete something;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该std :: string是否仍然有效或被删除?(在对象本身)
数据成员mStr是类型std::string(它是一个对象,而不是引用).
因此,在构造函数的初始化列表(via : mStr(str))中初始化它时,将复制通过引用传递的参数.在您的示例中,只有初始化会导致复制:如果删除了初始化,则不会进行复制.