问题是这样的,我正在写一个文件系统模拟器,允许使用 cd 命令修改当前的工作目录,为此我添加了一个私有的名称为 workingDir 的 string 类型的数据成员,并有两个相关的函数:
bool Filesystem::changeWorkingDir(const string &path) {
if (!existPath(path)) {
cerr << "cd: No such directory " << path << endl;
return false;
}
workingDir = path;
return true;
}
string Filesystem::getWorkingDir() {
return workingDir;
}
但是出现了一个很玄学的问题,每当我调用 changeWorkingDir
函数修改 workingDir 后它自动的变为初始值。
如下图所示,workingDir 确实被修改了:
但是马上就又变了回去。。
程序中除了这两个函数,就只有构造函数和另外一个函数访问了 workingDir:
Filesystem::Filesystem() {
fsFilename = "data";
workingDir = "/";
// 略
}
bool Filesystem::list(string &path) {
if (path.empty()) path = workingDir;
// 略
}
编译好程序后,输入 mkdir home 随便创建一个文件夹,使用 cd home 修改工作目录,之后使用 pwd 打印工作目录发现其值依然是之前构造函数中初始化时给赋的值,即 "/"。
希望大家能帮忙看一下
1
wslzy007 2020-04-28 13:15:53 +08:00 2
看地址 Filesystem 对象不是一个吧
|
2
geelaw 2020-04-28 13:16:44 +08:00 via iPhone 1
Filesystem 会复制到 execute 里面,自然不会对外面的对象产生影响
|
3
misdake 2020-04-28 13:18:45 +08:00 1
Sheel.h 里 execute 函数第一个参数 Filesystem fs,复制进来的,所以每次都是 main 里面那个 fs 的复制
|
4
clayyj1210 2020-04-28 13:19:06 +08:00 1
#1 破案了。
|
5
wslzy007 2020-04-28 13:20:23 +08:00 1
介绍一下 0x64fd10 和 0x64fdc0,如果是对象复制,需要拷贝构造函数哦。
|
6
towry 2020-04-28 13:20:25 +08:00 1
this 地址都不一样了?
|
7
JustSong OP 谢谢大家,之前搞了好久,没注意到地址变了
|
8
JustSong OP 但是我之前也有在构造函数处打断点,没被触发
|
9
codehz 2020-04-28 17:58:50 +08:00 via Android 1
|
10
Wirbelwind 2020-04-28 22:07:24 +08:00
同意 #9
|
11
twoconk 2020-04-29 08:59:42 +08:00
呃呃 不是一个对象
|