Deu*_*ion 0 c++ pointers destructor vector delete-operator
我有一个包含几个向量的类,我不确定哪种方法是最好的,但是当我调用析构函数时,它们应该从内存中删除.
标头:
class Test
{
public:
Test();
~Test();
void AddString(char* text);
void AddString(string text);
private:
char * StringToCharPointer(string value);
vector<char*> *pVector;
}
Run Code Online (Sandbox Code Playgroud)
CPP文件:
Test::Test()
{
};
Test::~Test()
{
vector<char*>::iterator i;
for ( i = pVector->begin() ; i < pVector->end(); i++ )
{
delete * i;
}
delete pVector;
};
char * Test::StringToCharPointer(string value)
{
char *pChar = new char[value.length()];
strcpy(pChar, value.c_str());
return pChar;
};
Test::AddString(char* text)
{
pVector->push_back(text);
};
Test::AddString(string text)
{
pVector->push_back(StringToCharPointer(text));
};
Run Code Online (Sandbox Code Playgroud)
所以这里几乎是我使用的所有方法,但有什么不对?
首先,i是向量上的迭代器,它不是存储在向量中的指针.*i是存储在向量中的指针,所以如果要删除任何东西,它应该是那样的.
其次,delete *i只有在指向的对象*i被分配时才有效new.不是new[],不是malloc,它不指向字符串文字.由于您没有说明您的数据是如何分配的,因此我们无法说明您是否正确地释放了数据.
你似乎应该使用一个std::vector<std::string>.
更新更新的问题:
标头:
class Test
{
public:
Test();
~Test();
void AddString(const string &text);
private:
vector<string> mVector;
};
Run Code Online (Sandbox Code Playgroud)
CPP文件:
Test::Test()
{
};
Test::~Test()
{
};
void Test::AddString(const string &text)
{
mVector.push_back(text);
};
Run Code Online (Sandbox Code Playgroud)