gpt4 book ai didi

c++ - 如何一次重置大量类成员,而不是在析构函数中?

转载 作者:行者123 更新时间:2023-11-30 00:41:01 26 4
gpt4 key购买 nike

我有一个包含许多简单类类型成员的类。更重要的是,随着我继续开发,它们的数量也在增加。

我需要能够一次重置它们,并且我想在不复制粘贴的情况下进行重置。目前的代码如下所示:

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() 函数(只是因为忘记了一个 seg.fault)。

我打算做的是将它们全部收集到一个结构中,并将这个结构分配到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 的对象不打算被复制或复制构造,尽管我没有费心通过将分配和复制构造函数设为私有(private)来确保这一点。

您认为这种方法有什么问题吗?您还有其他建议吗?

编辑

根据@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];
};

最佳答案

使用静态大小的数组。

Stmt statements[10];

for(int i = 0; i < sizeof(statements) / sizeof(Stmt); i++)
statements[i].reset();

关于c++ - 如何一次重置大量类成员,而不是在析构函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com