例外をスローするこのコンストラクターがあります
GenericSocket::GenericSocket(const string& hostname,
const string& servname):
_hostname(hostname),
_servname(servname)
{
initHints();
int rv;
if((rv = getaddrinfo(_hostname.c_str(),
_servname.c_str(),
&_hints,
&_servinfo)) != 0) {
throw GenericSocketException();
}
}
initHints() は、_hints の memset を実行し、いくつかの変数を設定します。
次のようなGoogleテストフレームワークでテストします。
TEST(CreateObject2, getaddrinfoException)
{
mgs_addrinfo_return = 1;
ASSERT_THROW(new GenericSocket("testhost", "4242"), GenericSocketException);
}
テストはコア ダンプで失敗します。
[ RUN ] CreateObject2.getaddrinfoException
socket creation failed
terminate called after throwing an instance of 'common::GenericSocketException'
what(): Socket creation failed
[1] 43360 abort (core dumped) ./bin/test_common
何が問題なのか正確にはわからないという事実に加えて、初期化されていないオブジェクトが削除されているのではないかと疑っています (?)。オブジェクトの作成後に呼び出すことができる別の関数にこの機能を配置し、後で例外を処理する方がよいでしょうか?