単純な答えは、それらをシングルトンにしないことです。プログラムの存続期間がある場合は、メインプログラムで作成してください。誰かがそのオブジェクトで何かをする必要がある場合、明示的な依存関係にしてください。
は、ここでは、別のオプション
int main()
{
// Create something so my program can use periodic tasks
CPeriodTask* pMyPeriodicTasks = new CPeriodTask();
// Object foo needs to do periodic tasks, lets pass this functionality in
CFoo* myProgramsFoo = new CFoo(pMyPeriodicTasks);
}
をCPeriodTaskために、例の共有リソースへのプロキシを公開し、舞台裏でリソースを処理:
class CMyPeriodicTask
{
public:
// obtain resource
CMyPeriodicTask(/*function ptr*/);
// release resource
~CMyPeriodicTask();
};
このコードの中で、どのようなシステムとのインタフェース定期的なタスクを開始するために必要なコード。その後CFooは、単にそれを使用しています。
class CFoo
{
private:
CMyPeriodicTask periodicTask;
...
};
私は誰もが機能性と機能が頻繁に使用される後者のケースを必要とするとき前者を使用してお勧めしたいです。
あなたが変更しようとしていることをカバーする単位テストと受け入れテストがあることを確認してください。事実の後にこれらのものを掘り起こすことは、乱雑になる可能性があります。 –