gpt4 book ai didi

c++ - C++中如何处理new抛出的异常?

转载 作者:行者123 更新时间:2023-11-28 02:23:24 25 4
gpt4 key购买 nike

我有一个带有赋值运算符的类,如下所示。

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 的值恢复为旧值?

最佳答案

对此有两种解决方案。第一个(最好的)是使用 copy-and-swap :

myString& operator= ( myString other ) {
swap (*this, other);
return *this;
}

如果复制构造函数中的分配失败,我们将永远无法进行交换,因此不用担心会覆盖我们的当前状态。有关更多信息,请参阅 What is copy-and-swap?

另一种方法是确保只有在安全的情况下才删除。也就是说,在 new 之后执行:

tmp_buff = new char[other.length];
// either that threw, or we're safe to proceed
length = other.length;
my_strncpy(tmp_buff, other.buff, length);
delete [] buff;
buff = tmp_buff;

关于c++ - C++中如何处理new抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com