【发布时间】:2020-08-29 16:02:55
【问题描述】:
我只是在看下面的代码sn-p:
#include<iostream>
#include<cstring>
using namespace std;
class String
{
private:
char *s;
int size;
public:
String(const char *str = NULL); // constructor
~String() { delete [] s; }// destructor
void print() { cout << s << endl; }
void change(const char *); // Function to change
};
String::String(const char *str)
{
size = strlen(str);
s = new char[size+1];
strcpy(s, str);
}
void String::change(const char *str)
{
delete [] s;
size = strlen(str);
s = s + 1;
s = new char[size+1];
strcpy(s, str);
}
int main()
{
String str1("StackOverFlow");
String str2 = str1;
str1.print();
str2.print();
str2.change("StackOverFlowChanged");
str1.print();
str2.print();
return 0;
}
我希望输出为: 堆栈溢出, 堆栈溢出, 堆栈溢出, StackOverflowChanged。
在 str2.change("StackOverFlowChanged") 行之前,str1 和 str2 的 s 都指向同一个内存位置。但是,在change方法中,由于指针值发生了变化,我除了现在str1和str2的s指向不同的位置,事实并非如此。有人能解释一下为什么会这样吗?
【问题讨论】:
标签: c++