假设我有一个像这样的循环:

vector<shared_ptr<someStruct>> vec;
int i = 0;
while (condition)
{
     i++
     shared_ptr<someStruct> sps(new someStruct());
     WCHAR wchr[20];
     memset(wchr, i, 20);
     sps->pwsz = wchr;
     vec.push_back(sps);
}

在此循环的结尾,我看到对于 vector 的每个sps元素,sps->pwsz都是相同的。这是因为我要传递指向循环中分配的内存的指针,该指针在每次迭代后都会被破坏,然后在下一次迭代时重新填充相同的内存?

最佳答案

我认为这段代码并没有达到您的期望。您可能希望在堆上或作为wchr的成员创建someStruct
wchr在堆栈上分配,并在每次迭代时释放。每次迭代的堆栈位置都相同(可能相同)。

您的每个智能指针都包含一个指向该无效内存地址的指针。

在while循环之后,所有智能指针都指向相同的无效已释放地址。该地址在每次迭代中都被重新使用和释放。

10-06 04:56