是否有一种方法可以始终通过值(制作副本)而不是在使用类成员函数时通过参考来传递
Is there a way to always pass by value (Make a copy) rather than passing by reference when working with class member functions?
对于一些背景,我已经研究了C 3个月,所以我基本上是一个新手,我正在尝试理解包含原始指针作为数据成员以及如何使用的类抄写器并与它们移动语义。
所以我有一个简单的类,其中包含一个简单的构造函数/驱动器和一个未实现的复制构建器。
我要做的就是使用上述类创建一个对象,然后用它调用成员函数。
所以我的问题是:
我能以某种方式保证,当我调用成员函数时,我会制作一个对象的副本,而不是通过参考将其传递给它?
如果添加"&",则可以通过参考轻松传递某些内容。但是操作员如何按价值传递东西?我已经阅读了按值按值的通行证是编译器这样做的默认方式,但是由于某种原因,当我执行代码时,复制构造函数未调用。
using namespace std;
class dog {
public:
string* name;
int* age;
dog(string NameVal = { "Null" }, int AgeVal = { 10 }) {
name = new string{ NameVal };
age = new int{ AgeVal };
cout << "constructor for " << *name << endl;
}
~dog() {
cout << "destructor for " << *name << " " << age << endl;
}
dog(const dog &source) {
cout << "copy constructor for " << *name << endl;
}
void talk(string text) {
cout << text << *name << endl;
}
};
int main() {
dog test;
test.talk("Test_Text ");
return 0;
}
所以我希望复制构造函数被调用为测试对象,但看起来它是通过使用"此"指针通过引用传递的。
调用函数时,我该如何更改并实际制作对象的副本?
感谢您的任何帮助。
好吧,如果要复制对象,然后在新对象上调用函数,则需要明确地进行操作:
dog test{};
dog{test}.talk("copy talk");
请注意,您还需要实际实现副本构造函数以使其工作,否则课程将不可原始化:
dog(const dog &source)
: name{new string{*(source.name)}}
, age{new int{*(source.age)}}
{
cout << "copy constructor for " << *name << endl;
}
是否有一种方法可以始终通过值(制作副本(而不是在使用类成员函数时通过参考来传递?
使用静态操作,按值接收实例
class dog {
...
static void talk(dog inst, string text) {
cout << text << *(inst.name) << endl;
}
...
};
int main() {
dog test;
dog::talk(test, "Test_Text ");
// or even
test.talk(test, "Test_Text ");
}
相关文章:
- 通过参考变差函数传递N-D数组
- 函数参数绑定通过参考与传递指针传递数组的规则
- 如何调用成员初始化器列表中参考成员的构造函数
- 函数采用原始指针试图通过错误msg中概述的参考来接受指针
- 为什么即使传递给函数作为参考,指针也未被分配
- 为什么通用参考概念不适用于函数指针的地图插入
- 使用Arduino IDE的构造函数的未定义参考错误
- 未定义的参考错误链接天然函数Android
- 如何将rvalue作为参考参数传递给函数
- 超载函数既不按值,也不是通过参考来对象,而是将撤销的指针换成对象
- 为什么该函数不会获得动态数组?(我正在使用指针和参考)
- 无法将类对象转换为函数默认参数中的参考
- 当通过函数中的参考调用时,标识符不确定
- 是否有一种方法可以始终通过值(制作副本)而不是在使用类成员函数时通过参考来传递
- std ::函数方法参考无法将dword投入到dword64
- rvalue参考vector :: push_back函数如何提高效率
- 函数返回rvalue参考是否有意义
- Python ctypes,回调函数增强类型是C++参考
- 函数参考funcname @number, @x是什么意思
- 为什么在C 中创建单例类创建期间静态函数参考静态变量