假设我有一个像这样的循环:
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循环之后,所有智能指针都指向相同的无效已释放地址。该地址在每次迭代中都被重新使用和释放。