我正在開發一個庫,用戶應該能夠使用靜態全局實例。這些實例(前主中運行),然後在可以使用另一個全局矢量自己註冊......自注冊全局對象
目前,它會有點像這樣...
class A;
std::vector<A*> v;
class A {
public:
A (int i) : i(i) {
v.push_back(this);
}
int get() const {
return this->i;
}
private:
int i;
};
A a(1);
A b(2);
int main()
{
for (A* const& c : v)
std::cout << c->get() << std::endl;
for (std::vector<A*>::iterator i = v.begin(); i != v.end(); i++)
delete *i;
return 0;
}
不過,這恐怕代碼會泄漏......更重要的是,當我不希望用戶明確地刪除向量的內容(無論如何他們會忘記它),它應該在main的結尾自動發生。
還有其他解決方案嗎?我想使用一個std :: unique_ptr向量,但顯然他們不這樣工作...
「*我想使用std :: unique_ptr的向量,但顯然他們不這樣工作...... *」請詳細說明。此外,您__不應嘗試「刪除」靜態分配的對象(此代碼不會像您所建議的那樣泄漏,但會刪除對象兩次會調用UB)。 – ildjarn
由於您在靜態實例上工作:a)該代碼是如何泄漏的,以及b)爲什麼地球上的指針指向靜態對象時會調用delete。總之,我會說你的代碼(如你所示)是越野車,但它不應該泄漏 – Grizzly