StringDataをObjectDataから派生させりゃいいんじゃないの?
つーかObjectとかStringって何者なん?

>Objectクラスに参照カウンターを持たせ、デストラクタにて参照カウントを-1します。
>カウントが0になってしまったのなら責任を持って参照先をdeleteします。

これだけならboost::shared_ptrがそのまんまの機能を持ってるんだけど。