【发布时间】:2013-01-12 18:18:41
【问题描述】:
我有以下包含 3 种数据类型的类:
class CentralBank{
MaxHeap richestBanks;
HashTable banks;
AccountTree accounts;
public:
CentralBank(int numAccounts, Account* accounts, int numBanks, Bank* bankArr);
void AddAccount(Account account);
void RemoveAccount(int accountID);
void AddBank(Bank bank);
int GetAccountsNumber(int bankID);
void GetKRichestBanks(unsigned int K, Bank* banks);
int GetSumBalance (int low, int high);
};
这是构造函数:
CentralBank::CentralBank(int numAccounts, Account* accounts, int numBanks,
Bank* bankArr): accounts(numAccounts,accounts){
int** locs = new int*[numBanks];
richestBanks = MaxHeap(numBanks,bankArr, locs);
banks = HashTable(numBanks,bankArr,locs);
delete[] locs;
}
我的问题是堆和哈希表的析构函数是在它们的构造函数之后调用的。如果我把它们都变成指针,它就不会发生。 为什么会这样? 有没有办法让它们不是指针,也没有在初始化后立即调用析构函数?我没有正确初始化它们吗?
PS:它们不在初始化列表中,因为它们的构造函数需要需要初始化的“locs”参数。
【问题讨论】:
-
你看到的析构函数是临时的。
-
"它们不在初始化列表中,因为它们的构造函数需要需要初始化的“locs”参数。" 然后修复那个 .这就是导致您不得不使用不稳定的初始化技术的原因。
-
@NicolBolas:我可以,但我不愿意。不过,我想了解为什么这不起作用,所以我不会犯同样的错误。
-
@Shookie :您的错误在于编写代码时首先使用了
new。 ;-] -
或者,如果可以的话,一个 C++11 智能指针或 boost 智能指针。
标签: c++ constructor initialization destructor