如何在C ++中适当地重载运算符强制转换char *?

时间:2018-09-19 10:57:17

标签: c++ string operator-overloading return-value

我有一个带有数值的类。 我需要添加一个运算符重载,当重载为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的析构函数将删除该值,并返回随机数据。

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

  

有什么主意吗?

  1. 使用字符串而不是char指针。

    VAR :: operator STRING();

  2. 如果不是1.,则返回字符串的新副本。

char const *retVal = new char[test.size() + 1]; std::strncpy(retVal, test.Get(), test.size()); retVal[test.size()] = '\0'; return retVal;

(别忘了以后delete[]。)

  1. 最后,您可以将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}}方法。