string *str=new string;
vector<string *> vector;
vector.push_back(str)
简而言之,我想知道当指针的向量超出范围时,指针的自身占用空间是否被释放?
答案 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,并且如果没有比这些指针更多的保持字符串的引用,它们也将释放字符串。)
进一步阅读: