私は、単純なクラス型の多くのメンバーを含むクラスを持っています。もっと重要なのは、開発を続けるうちにその数が増えていることです。デストラクタではなく、多数のクラスメンバーを一度にリセットする方法はありますか?
すべてを一度にリセットする必要があります。コピーして貼り付けることなくやり直したいと思います。
typedef auto_ptr<odbc::PreparedStatement> Stmt;
class DbProxy {
private:
void reset();
Stmt a;
Stmt b;
Stmt c;
// ... about 10 more
};
void DbProxy::reset()
{
a.reset();
b.reset();
c.reset();
// etc.
}
もちろん、私は(ちょうどワンセグを持っていたものを忘れるために障害。)reset()
関数にすべての新しいメンバーを追加する必要が好きではない:コードは、現在のように見えます。
私がしようとしているのは、それらをすべて構造に集めて、この構造をauto_ptr
の下に割り当てることです。だから、コードは次のようになります。私は割り当てとコピーCTORのプライベートを作ることによって、これを確実にするために気にしませんでしたが、DbProxyの
typedef auto_ptr<odbc::PreparedStatement> Stmt;
class DbProxy {
public:
DbProxy(): stmts(new OdbcResources) {}
private:
void reset() { stmts.reset(); }
struct OdbcResources {
Stmt a;
Stmt b;
Stmt c;
// ... about 10 more
};
auto_ptr<OdbcResources> stmts;
};
オブジェクトは、コピーまたはコピーを構築することを意図していません。
この方法に問題はありますか?あなたは他の提案がありますか? @DeadMGの提案に基づいて
EDIT
、何これについて:
class DbProxy {
public:
DbProxy();
private:
enum Statements { SELECT1, SELECT2, INSERT, LAST }; // never mind the names
void reset() { for (int i=0; i < LAST; i++) statement[i].reset(); }
Stmt statements[LAST];
};
'Stmt'オブジェクトを配列に配置できますか?あなたはそれらの任意の数を処理することができますその方法。 –
なぜ 'shared_ptr <>'オブジェクトのコンテナではありませんか? – Nim
@Robert、これは可能ではありません。 'auto_ptr'はコンテナに格納できません。 – Nim