我正在使用一个库中的类。假设它叫作A,并且有一个字符指针“token”。
我的代码:
为什么它变成了无效的:A类如下所示:
在
在以下情况下,有什么解决方案:
情况1:类A在给定库中:因此我不能修改它。
情况2:如果我可以修改类A:处理这种情况的好方法是什么?
我知道,如果通过引用调用anotherFunction,我就不会遇到这个问题。但是如果我必须在某个时候保留对象的副本怎么办?
请查看示例代码:https://ideone.com/yZa4k4
我的代码:
void someFunction()
{
A a;
cout<<a.token;
anotherFunction(a);
cout<<a.token; // line 4: now token became invalid [1]
}
void anotherFunction(A copyOfA);
{
// doing something
} // on exit destructor of copyofA will be called
为什么它变成了无效的:A类如下所示:
class A
{
char *token;
public:
A()
{
token = GetRandomToken(); // GetRandomToken will return a 'new Char' array
}
~A()
{
if(token != NULL)
{
delete[] token; // it is A's responsibility to delete the memory it created
token = NULL;
}
}
};
在
anotherFunction
中,当copyOfA的析构函数被调用时,token
被删除了。因此,在第4行,token是无效的,因为a.token和copyOfA.token都指向同一个地址。在以下情况下,有什么解决方案:
情况1:类A在给定库中:因此我不能修改它。
情况2:如果我可以修改类A:处理这种情况的好方法是什么?
我知道,如果通过引用调用anotherFunction,我就不会遇到这个问题。但是如果我必须在某个时候保留对象的副本怎么办?
请查看示例代码:https://ideone.com/yZa4k4
A
包装在另一个类B
中,从而不直接使用A
。问题是:你打算复制A
的副本来做什么?复制由token
指出的内容?还是两个实例都应该共享token
? - Holt