【发布时间】:2015-07-20 10:57:09
【问题描述】:
我有一个带有赋值运算符的类,如下所示。
char *buff;
myString& operator= ( const myString& other )
{
cout << " myString::operator=\n";
if( this != &other ){
cout<<"my string ="<<endl;
delete [] buff;
length = other.length;
buff = new char[length];
my_strncpy( buff, other.buff, length );
}
return *this;
}
我正在删除buff 的内存并分配新字符串的长度。如何处理new 分配内存期间发生的任何异常?如果出现异常,如何将buff 的值恢复为旧值?
【问题讨论】:
-
这似乎是一个很容易回答的问题,但它真的是您想要的。您可以在删除缓冲区之前将该值存储在一些全局临时变量中。这段代码你可能会得到一个
bad_alloc异常,同样可以使用try catch 块来处理。 -
首先,您需要确定在内存不足时这是否是合理的做法。一个对象在赋值后默默地保留它的旧值听起来充其量是不确定的。
-
更简单的解决方案是使用
std::vector<char>来分配内存。
标签: c++ c++11 exception-handling new-operator assignment-operator