Я пытаюсь удалить все удаление и удаление [] старого приложения и вместо этого использовать интеллектуальные указатели. В следующем фрагменте кода я хочу удалить последнее для cicle.Удалить delete/delete []
std::unique_ptr<MapiFileDesc> fileDesc(new MapiFileDesc[numFiles]);
for (int i = 0; i < numFiles; ++i)
{
// Works but I've to delete[] at the end
fileDesc[i].lpszPathName = new CHAR[MAX_PATH];
// Does not work. For each iteration the previous array will be deleted
// It also happens with shared_array
boost::scoped_array<CHAR> pathName(new CHAR[MAX_PATH]);
fileDesc[i].lpszPathName = pathName.get();
}
// I want to remove the following cicle
for (int i = 0; i < numFiles; ++i)
{
delete [] fileDesc[i].lpszPathName;
fileDesc[i].lpszPathName = nullptr;
}
Как вы думаете, что это лучший подход к этой ситуации: использовать объект-оболочку, которая будет отслеживать все массивы, созданных и удалять их в деструкторе или использовать вектор повышающего :: shared_array и назначение их к каждому из элементов?
std::vector<boost::shared_array<CHAR> > objs;
for (int i = 0; i < 10; ++i)
{
objs.push_back(boost::shared_array<CHAR>(new CHAR[MAX_PATH]));
}
мне нужно использовать повышение :: shared_ptr, поскольку я использую VC++ 2008
Спасибо заранее. J. Lacerda
Используйте 'std :: string'. – Fanael
Если вы выделяете 'new []', вам нужно 'std :: unique_ptr'. Но да, вместо этого используйте 'std: string'. –
juanchopanza
@juanchopanza Просто для любопытства, это только синтаксис C++ 11, или он будет работать с (старым) 'std :: auto_ptr' должным образом? –