C++对象构造函数通过常量引用复制传递
C++ object constructor pass by const reference copying
当我将一个对象作为常量引用传递给另一个对象时,是否进行了复制?我一直认为,由于我通过引用传入对象,成员对象本身实际上是我传入的对象,而不是副本。我制作了一个测试程序,使传入的引用对象在作用域结束时被销毁,但它并没有像我预期的那样崩溃。这是一个等待发生的错误,还是对象正在被复制?
#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;
}
这个std::字符串仍然有效还是被删除了?(在对象本身中)
数据成员mStr
的类型为std::string
(它是一个对象,而不是引用)。
因此,当您在构造函数的初始化列表中初始化它时(通过: mStr(str)
),通过引用传递的参数是复制的。在您的示例中,只有初始化才会生成副本:如果删除初始化,则不会生成副本。
temp
变量的内容被复制到mStr
。代码有效。
你是对的,只是你错过了mStr(str)制作str副本的事实。这个副本在~Somthing()中被销毁;
相关文章:
- 深层复制具有自引用指针的类
- 对复制 CTOR 和 CTOR 的未定义引用
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- C++:右值引用构造函数和复制省略
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 如何复制只引用基类的派生类
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++为具有引用成员变量的类创建复制构造函数
- std::vector 是否有用于引用的复制构造函数?
- 是复制了新数组还是指向结构中引用的数组的指针?
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 通过引用传递是否涉及复制地址
- 复制引用结构上的赋值
- C++初始化指针/引用/复制细微差别
- 如何在C++中通过引用复制对象
- 如何将一个向量的元素引用复制到另一个向量?
- C++对象构造函数通过常量引用复制传递
- 通过引用复制本地对象