C ++隐式类到char *的转换

时间:2018-12-02 06:45:56

标签: c++ memory-leaks char implicit typecasting-operator

我现在正在锻炼,所以我会马上说我不想使用std :: string解决我的问题。

我有一个简单的类,其中包含几个字段,其中有char *文本字段,可以分配,重写或重新分配。

class MyClass
{
private:
  char* name;
...
public:
  operator char*() const { return name;}
}

我要做的是将隐式转换为char *,以便可以在程序中执行此操作:

Myclass s = "Hello"    //allocates 6 bytes and pust a 0-terminated "Hello/0" line into "name"

char* c = s

s = "Hello World"      //re-allocates memory, frees previous memory

cout << "Str: " << s << " Char: " << c;

很显然,正如我甚至在测试之前就注意到的那样,当“名称”的重新分配发生并且内存被释放时,“ c”现在指向垃圾。 所以这段代码是行不通的,我完全理解为什么。

我想我可以分配新内存并返回一个指向它的指针:

operator char*() const
{
  int length = strlen(name)+1;
  char* ptr = new char[length]
  std::copy(name, name+length, ptr);
  return ptr;
}

但是在这种情况下,如果我以后将“ c”重新分配给其他东西-那么内存将永远不会被释放,对吗?如果我这样做:

c = "Bye";

然后基本上我复制了“名称”的内存将仍然保持分配状态并泄漏?

问题是:如何做到这一点?我是否应该为此担心,还是仅假设重新分配“ c”的用户应首先注意清除内存?

我将重复我的目标,那就是通过内存操作和指针来做到这一点,而不是安全地使用std :: string。 谢谢!

0 个答案:

没有答案