我在分配这样的代码后获得类成员的值时遇到问题:
bool ModeData::setPasswd(char* _pass)
{
return (this->setString(this->passwd_, _pass) ? true : false);
}
bool ModeData::setOutput(char* _out)
{
return (this->setString(this->output_, _out) ? true : false);
}
其中setString是这样的:
bool ModeData::setString(char* _toStr, char* _fromStr)
{
// check if already exists and delete
this->delIfPresent(_toStr);
// allocate space for the new string
_toStr = new char[strlen(_fromStr) + 1];
// copy new string
if(strcpy(_toStr, _fromStr))
{
return true;
}
// if something gone wrong return 'false'
return false;
}
然后如果我想打印this-> passwd_的值,我什么也得不到。 我认为指针在通过方法时会丢失,但我不确定。
答案 0 :(得分:3)
你应该通过ref传递指示......不,不!等一会。你应该不使用指针,你应该使用std::string
代替!这将使你的生活变得更加轻松。
这就是说,如果真的想要使用指针,那么问题是你是按值传递它们的。一旦函数返回,对这些指针所做的更改(特别是_toStr = new char[strlen(_fromStr) + 1];
中的赋值)将不会对调用者可见 - 并且作为副作用,您的程序正在泄漏内存。
要解决此问题,请通过引用传递指针 :
bool ModeData::setString(char*& _toStr, char*& _fromStr)
// ^ ^
不要忘记用delete[]
分配的new[]
数组,否则会有内存泄漏。但是,让我再次给你这个建议:使用std::string
而不是通过原始指针进行手动内存管理。