遇到了一个玄学问题, C++ 修改类的数据成员后其值又自己变了回去
資深大佬 : JustSong 14
问题描述
问题是这样的,我正在写一个文件系统模拟器,允许使用 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 打印工作目录发现其值依然是之前构造函数中初始化时给赋的值,即 “/”。
希望大家能帮忙看一下
大佬有話說 (11)