我有一个带有数值的类。 我需要添加一个运算符重载,当重载为char *(或wchar *)时,该重载返回具有可读值的字符串。
我尝试过
VAR::operator char*()
{
STRING test;
test.format("%d",value); //fills string with "readable" data
return test.Get() //returns the char* content of the test;
}
,但调用STRING的析构函数将删除该值,并返回随机数据。
有什么主意吗?
答案 0 :(得分:1)
有什么主意吗?
使用字符串而不是char指针。
VAR :: operator STRING();
如果不是1.,则返回字符串的新副本。
char const *retVal = new char[test.size() + 1];
std::strncpy(retVal, test.Get(), test.size());
retVal[test.size()] = '\0';
return retVal;
。
(别忘了以后delete[]
。)
test
设为班级的成员并返回其内容;那么它将在功能结束后继续存在。答案 1 :(得分:0)
除非您要求调用者在返回的指针上调用delete[]
,否则您不能这样做。
VAR::operator char*()
{
char* test = new char[required_bytes];
// Fill 'test'
return test;
}
只返回一个std::string
(或std::wstring
)对象会更好,也更明智。当呼叫者希望从中使用C字符串时,他们可以调用c_str()
的{{1}}方法。