Есть несколько возможностей с различными преимуществами и недостатками. Я не знаю, что содержит таблица, поэтому назову ее Entry
.
Если вы просто хотите, чтобы память покидала программу при выходе из программы, используйте глобальный auto_ptr:
auto_ptr<Entry> pTable;
Вы можете инициализировать его в любое время, и оно будет автоматически удалено при выходе из программы. К сожалению, это загрязнит глобальное пространство имен.
Похоже, вы используете одну и ту же таблицу в нескольких экземплярах одного класса . В этом случае обычно делается статическим указателем этого класса:
class MyClass {
...
protected:
static auto_ptr<Entry> pTable;
};
Если вы хотите, чтобы он был доступен в экземплярах различных классов , то вы можете сделать его статическим членом функции, они также будут удалены при выходе из программы, но действительно хорошая вещь что он не будет инициализирован, пока функция не будет введена. То есть ресурс не нужно выделять, если функция никогда не вызывается:
Entry* getTable() {
static auto_ptr<Entry> pTable = new Entry[ gNumEntries ];
return pTable;
}
Вы можете сделать любой из них с std::vector<Entry>
, а не auto_ptr<Entry>
, если хотите, но главное преимущество в том, что его можно легче изменить динамически. Это может быть не то, что вы цените.