我有一个包含许多简单类类型成员的类。更重要的是,随着我的发展,他们的数量正在增长。
我需要能够一次将它们全部重置,并且我想在不复制粘贴的情况下进行操作。代码目前看起来像:
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
. 所以代码看起来像这样:
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;
};
DbProxy 的对象不打算被复制或复制构造,尽管我没有费心通过将赋值和复制ctor 设为私有来确保这一点。
你觉得这种方法有什么问题吗?您还有其他建议吗?
编辑
根据@DeadMG 的建议,这个怎么样:
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];
};