gpt4 book ai didi

c++ - 指向对象的指针 vector - 如何避免内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:50 24 4
gpt4 key购买 nike

我们通常如何处理一个 vector ,其元素是指向对象的指针?我的具体问题是下面提供的代码末尾的评论。谢谢。

class A
{
public:
virtual int play() = 0 ;
};

class B : public A
{
public:
int play() {cout << "play in B " << endl;};

};

class C : public A
{
public:
int play() {cout << "play in C " << endl;};

};


int main()
{

vector<A *> l;
l.push_back(new B());
l.push_back(new C());

for(int i = 0 ; i < l.size();i++)
{
l[i]->play();
}

//Do i have to do this to avoid memory leak? It is akward. Any better way to do this?
for(int i = 0 ; i < l.size();i++)
{
delete l[i];
}

}

最佳答案

是的,您必须这样做以避免内存泄漏。更好的方法是创建一个共享指针 vector (boost,C++TR1,C++0x,)

 std::vector<std::tr1::shared_ptr<A> > l;

或唯一指针 vector (C++0x),如果对象实际上并未在此容器与其他对象之间共享

 std::vector<std::unique_ptr<A>> l;

或使用增强 pointer containers

  boost::ptr_vector<A> l;

PS:根据@Neil Butterworth,不要忘记 A 的虚拟析构函数!

关于c++ - 指向对象的指针 vector - 如何避免内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447804/

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