超出范围,指针向量可以删除指针的自占空间吗?

时间:2013-05-09 09:10:41

标签: c++ pointers

string *str=new string;

vector<string *> vector;

vector.push_back(str)

简而言之,我想知道当指针的向量超出范围时,指针的自身占用空间是否被释放?

1 个答案:

答案 0 :(得分:4)

您的问题有点不清楚,但我想,您希望动态分配字符串,但在向量超出范围后自动释放,对吗?

Vector会在销毁时仅销毁其内容。这意味着,当向量超出范围时,它将销毁其列表中保存的指针,但它不会销毁这些指针指向对象。所以它可能会导致内存泄漏。

实际上,这个问题有一些解决方案。您可以存储std :: string的实例,而不是指向std :: strings:

的指针
std::vector<std::string> strings;
strings.push_back("Alice has a cat");

strings超出范围时,所有字符串都将被销毁。

另一种选择是使用boost(如果使用C ++ pre-11)或std(如果使用C ++ 11),则使用名为shared_ptr或unique_ptr的类。它的行为更像是指针,但当它超出范围时,它会破坏包含的对象。因此,如果您按照以下方式声明您的列表:

std::vector<std::shared_ptr<std::string>> strings;
std::push_back(std::make_shared<std::string>("Alice has a cat"));

字符串将被动态分配,并自动释放(向量将释放所有shared_ptr,并且如果没有比这些指针更多的保持字符串的引用,它们也将释放字符串。)

进一步阅读: