我为存储在指针地址中的值分配了一个变量,那么为啥当初始值改变时它不改变呢?
Posted
技术标签:
【中文标题】我为存储在指针地址中的值分配了一个变量,那么为啥当初始值改变时它不改变呢?【英文标题】:I assigned a variable to the value of what is stored at a pointer's address, so why doesn't it change when the initial value does?我为存储在指针地址中的值分配了一个变量,那么为什么当初始值改变时它不改变呢? 【发布时间】:2021-03-04 17:23:41 【问题描述】:基本上,我只想知道为什么“A”发生变化时“C”不变。我猜这是因为层次结构,但我想确认并解释为什么......
#include <iostream>
using namespace std;
class IntCell
public:
explicit IntCell( int initialValue = 0 )
storedValue = new int initialValue ;
int read() const
return *storedValue;
void write( int x )
*storedValue = x;
private:
int *storedValue;
;
int main()
IntCell a 2 ;
IntCell* b = &a;
IntCell c;
int x = 10000;
int* y = &x;
cout << *y << endl;
c = *b;
a.write(4);
cout << a.read() << endl << c.read();
return 0;
【问题讨论】:
你得到了什么输出,预期的输出是什么?我收到10000 4 4
,这是意料之中的,但我不确定我是否理解您的问题。
@DavidSchwartz storedValue
对于两个实例都是相同的。因此a.write(4);
会影响c.read()
的结果。我认为这就是 OP 的意思。
【参考方案1】:
我测试你的代码,当你改变“a”时,“c”也会改变。 你还需要实现一个复制构造函数和赋值运算符。
IntCell c; // you create a new instance with new memory address.
c = *b; // now this instance point to same memory as "a".
a.write(4); // so when you change "a", "c" change too.
【讨论】:
所以我对整个编程真的很陌生。你做了什么来得到这个故障/你使用什么 IDE?【参考方案2】:在你的情况下,析构函数丢失了。
~IntCell()
cout<<"deleting...\n";
delete storedValue;
您正在使用隐式定义的复制分配。这就是c = *b;
起作用的原因。复制分配后,IntCell c
和IntCell a
都有指向同一位置的成员。如果a.write(4)
,c.read()
将得到相同的值4
。
【讨论】:
以上是关于我为存储在指针地址中的值分配了一个变量,那么为啥当初始值改变时它不改变呢?的主要内容,如果未能解决你的问题,请参考以下文章