在下面的代码中,作者指出new operator
函数调用可能会导致异常,因此此实现不是异常安全的,因为对象状态已在第一行中更改。
String &String::operator =( const char *str ) {
// state is changed
delete [] s_;
if( !str ) str = "";
// exception might occur because of new operator
s_ = strcpy( new char[ strlen(str)+1 ], str );
return *this;
}
在阅读时,我想知道 C 库函数是否会在 C++ 中引发异常?我知道 C 中没有异常,但是由于我们使用的是 C++ 编译器,因此可能会有异常。
那么,我们可以将 c 标准库函数视为异常安全函数调用吗?
谢谢你。
顺便说一句,为了记录,实现上述功能的正确方法(异常安全)如下。
String &String::operator =( const char *str ) {
if( !str ) str = "";
char *tmp = strcpy( new char[ strlen(str)+1 ], str );
delete [] s_;
s_ = tmp;
return *this;
}