0

参照によって渡された別のオブジェクトで構築されるオブジェクトがあります。コンストラクターに渡されるオブジェクトは次のようになります。

 HTTPServerResponse::HTTPServerResponse(Poco::Net::HTTPServerResponse &response)

私のラッパークラス(HTTPServerResponseresponseはある時点で破棄されますが、それ自体も破棄されません。response実際、私のクラスの外でも、破壊される可能性のある複数の(外部の)理由があります。

私が欲しいのはresponse、その存在を確認するために他のメソッドを呼び出す前です。

私は試した:

if(!response) {...

どちらが生成されましたerror C2675: unary '!' : 'Poco::Net::HTTPServerResponse' does not define this operator or a conversion to a type acceptable to the predefined operator; 当然、私も試しました:

if(response) {...

これも失敗しましたerror C2451: conditional expression of type 'Poco::Net::HTTPServerResponse' is illegal; No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

この混乱を修正するにはどうすればよいですか?

4

3 に答える 3

2

指している参照またはポインターが無効であるかどうかを知ることはできません(参照が無効/ nullであるかどうかを確認する必要がないのはなぜですか?を参照)。

誰が参照/ポインタを所有し、誰がそれを削除する必要があるかについて注意する(そして明確にする)必要があります。所有権を支援するために、std::unique_ptrまたはstd::shared_ptrを使用できます(C ++ 0xでは、それ以外の場合はブーストバージョンを使用します)。

于 2012-05-28T16:26:31.883 に答える
0

結局、スレッド全体をビジー状態に保ち、オブジェクトが終了するまでオブジェクトが削除されないようにしました。それは田舎者です、私は知っています、しかしそれは私にコード全体を通して私の道を田舎者にする必要があるすべての面倒を救いました。

于 2012-05-28T19:57:19.727 に答える
0

オブジェクトが存在するかどうかを本当に知る必要がありますか?シンクデザインパターンについて読んでください。BoostAsioで一般的に使用されています。ポインタを使用している場合は、削除などの後にポインタをnullにすることを忘れないでください...smart_ptrを試してください。

私にとって、ポインタがまだ存在するかどうかを確認する必要がある理由を想像するのは難しいです。コードに設計上の問題があります。

于 2012-05-28T17:02:32.670 に答える