gpt4 book ai didi

c++ - 在析构函数中删除指向 char* vector 的指针(不工作)

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

我有一个包含几个 vector 的类,我不确定哪种方法最好,但是当我调用析构函数时,它们应该从内存中删除。

标题:

class Test
{
public:
Test();
~Test();

void AddString(char* text);
void AddString(string text);

private:
char * StringToCharPointer(string value);

vector<char*> *pVector;
}

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));
};

以上是我使用的几乎所有方法,但有什么问题吗?

最佳答案

首先,i是 vector 上的一个迭代器,它不是存储在 vector 中的指针。 *i是存储在 vector 中的指针,所以如果你要删除任何东西,它应该是那个。

其次,delete *i仅当 *i 指向的对象时才有效分配了 new .不是new[] ,而不是 malloc,并且它不指向字符串文字。由于您没有说明您的数据是如何分配的,因此我们无法说明您是否正确释放了数据。

您似乎应该使用 std::vector<std::string> .

更新问题的更新:

标题:

class Test
{
public:
Test();
~Test();

void AddString(const string &text);
private:
vector<string> mVector;
};

CPP 文件:

Test::Test()
{
};

Test::~Test()
{
};

void Test::AddString(const string &text)
{
mVector.push_back(text);
};

关于c++ - 在析构函数中删除指向 char* vector 的指针(不工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292613/

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