我想问一个关于C++中的引用和指针的问题。
我是一个初学者在C++,所以我道歉,如果答案是微不足道的。
作为教程的一部分,我编写了以下代码。
#include <iostream>
using namespace std;
class Deep {
private:
int *data;
public:
void set_data_value(int d) {*data = d;}
int get_data_value () {return *data;}
// Constructor
Deep (int d);
// Copy constructor
Deep (const Deep &source);
// Destructor
~Deep();
};
Deep::Deep(int d) {
data = new int;
*data = d;
}
Deep::Deep (const Deep &source)
: Deep (*source.data){ // main body of the constructor (delegation comes before the body)
cout << "Copy Constructor - deep copy" << endl;
}
Deep::~Deep() {
delete data;
cout << "Destructor deleting data" << endl;
}
void display_deep (Deep s) {
cout << s.get_data_value() << endl;
}
int main () {
Deep obj1 {100};
display_deep (obj1);
Deep obj2{obj1};
obj2.set_data_value(1000);
cout << endl;
return 0;
}这个密码起作用了。我将解释我所做的事:
我定义了一个名为Deep的类来练习一个深拷贝。名为data的指针是私有的,我已经包括(稍后定义)函数原型set_data_value和get_data_value。
set_data_value接受一个整数d,取消data并将值d赋值给它。get_data_value只返回取消引用的data值。
在public域中还有一个构造函数,它接受一个整数d,一个复制构造函数,它使对象保持不变,并在析构函数旁边接受引用&source。
在复制构造函数中,我使用委托构造函数来改进代码流。
但是,如果我们观察到复制构造函数
Deep::Deep (const Deep &source)
: Deep (*source.data){ // main body of the constructor (delegation comes before the body)
cout << "Copy Constructor - deep copy" << endl;
}我们知道这是在void display_deep (Deep s)的逐值特性上运行的,因此source是对传入的s的引用。然后我们指向source并以某种方式获得数据的值,然后将其传递给构造函数。
这是怎么回事?*source.data是否像我所描述的那样工作,或者编译器是否采用了不同的方法?
发布于 2020-08-09 16:25:16
然后我们指向源和
没有指向任何东西。在这一行:
: Deep (*source.data)您只是在访问data中的source。那你就是在取消它。就像取消引用*data来获取其中的值一样。
https://stackoverflow.com/questions/63328506
复制相似问题