在析构函数中删除指向char*向量的指针(不工作)

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)

所以这里几乎是我使用的所有方法,但有什么不对?

Ste*_*sop 7

首先,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)