3

特定のクラスのインスタンスを大量に作成するために使用されるファクトリ クラスがあります。作成プロセスはかなり難読化されており、かなり時間がかかる場合があります。そのため、ファクトリ内に既に作成されているクラスのインスタンスを保存するのが賢明だと考えていました。後でそれらを呼び出すことができます。

std::map作成は単一のパラメーター (名前) に依存するため、私が呼び出すに物を格納できますold_instances

A A_factory::make_A(std::string const& name)
{
    if ( old_instances.find(name) != old_instances.end() )
    {
        return old_instances.find(name) -> second;
    }
    else
    {
        // obfuscated creation process that creates instance 'new_A'
        // ...

        old_instances.insert(std::pair<std::string, A>(name, new_A)); // <- problem
        return new_A;
    }
}

ここでの問題は、このルーチン全体がconstファクトリのメンバーになる可能性があることです。しかし、old_instances適応されているためです。

constこの些細なことのために関数の機能性を犠牲にするのはちょっと気まずい気がします。この種の犠牲は論理的ですか?

この質問が好みに依存しすぎている場合は、私を撃たないでください。

4

2 に答える 2

3

これは、を使用する典型的な例ですmutable。外部の振る舞いが本当にconstの振る舞いである限り、これを行うのは問題ないはずです。

于 2012-09-02T19:37:13.427 に答える
0

それはあなた次第です - old_instances の状態があなたのクラスのクライアントコードに観察可能/概念的な違いをもたらさないと思うなら、それを変更可能にし、ファクトリ関数を const にすることができます。しかし、それが本当であることを本当に確認する必要があります。そうしないと、後でコードを読んで自分自身や他の人を混乱させるだけです。

于 2012-09-02T19:26:43.800 に答える