Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2番目以降の基底クラスへのポインタから派生クラスをシリアライズする時の不具合その2 #19

Closed
yossi-tahara opened this issue Jan 9, 2017 · 1 comment

Comments

@yossi-tahara
Copy link
Owner

Issue #18検討中に、別の問題に気が付きました。

現在のオブジェクト追跡は基底クラスのアドレスでオブジェクトのマッチングを行っています。
そのため、2番目以降の基底クラスのアドレスと実オブジェクト(派生クラス)のアドレスが一致しません。
追跡に失敗するケースがある筈であることがわかりました。

派生クラスのインスタンスを保存し、その派生クラスの2番目以降の基底クラスのポインタを保存した時、基底クラスのアドレスと派生クラスのアドレスが一致しないため、インスタンス未保存エラーになる筈です。(まだ現象未確認です。)

派生クラスへのポインタにてオブジェクト追跡すれば対策できるので、そのように実装予定です。

yossi-tahara added a commit that referenced this issue Jan 9, 2017
オブジェクト追跡の使い方記述中
  サンプル・ソース用にstd::shared_ptr<>仮実装中、参照カウンタが回復できない問題発生。
    boostを参考に対策予定。 Issue #18, Issue #19
  非侵入型手動が、完全自動型を基底クラスとする時、基底クラスのシリアライズ・コードが必要になることを見落としていた。
    ドライバを修正して対処。(parse.h)

----------------- MD5 Hash Values -----------------
TheolizerDriver  : 1338faca054a45cfafd528d1beb18443
TheolizerLibrary : 52a86abf82699c0d0bb9324e0937507f
Library's Header : 801ac370a3115ac4e0c5d140281a5388

----------------- MD5 Hash Values -----------------
TheolizerDriver  : 1338faca054a45cfafd528d1beb18443
TheolizerLibrary : 52a86abf82699c0d0bb9324e0937507f
Library's Header : 801ac370a3115ac4e0c5d140281a5388
@yossi-tahara
Copy link
Owner Author

インスタンス未保存エラーになる筈です。(まだ現象未確認です。)

やってみました。未保存エラーになりませんでした。

もともとTheolizerはポインタ経由で保存されたクラスについては自動的にオブジェクト追跡します。
派生クラスの保存時に基底クラスも保存されますが、その時にオブジェクト追跡テーブルへ登録されます。
これにより、基底クラスがオブジェクト追跡されるため、基底クラスへのポインタも適切に回復されました。
これは適正な動作ですので、この問題はクローズします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant