Я думаю, что необходимо сфокусироваться на производительности. Если можно создать приложение, которое показывает различие в производительности при использовании DataSets по сравнению с Пользовательскими Объектами. Кроме того, попытайтесь показать им Доменные Управляемые Принципы разработки и как это соответствует платформам объекта.
Вам не нужно полагаться на сборку мусора.
У вас есть std :: auto_ptr, который предоставляет указатель, как синтаксис, и обертывает динамически выделяемый объект. При уничтожении он автоматически уничтожает объект, на который указывает.
Вы можете реализовать нечто подобное для массивов.
Почему бы не использовать умный указатель вроде boost :: shared_array
или использовать выделенный стеком std :: vector
? Для одиночного выделения, а не выделения массива, вы можете использовать boost :: shared_ptr
.
Они реализуют RAII за вас. Даже если вы повторно используете такую концепцию, как RAII, вы все равно изобретаете колесо, если уже существует конкретная реализация, удовлетворяющая вашим требованиям.
Вместо
try
{
set<ArrType*> sHeap;
ArrType* myArr = new ArrType[5];
sHeap.Add(myArr);
someExternalRoutine(myArr);
...
}
Вам просто нужно:
{
std::vector <ArrType> myArr(5);
someExternalRoutine(myArr);
}
без блока catch. Все выделение и освобождение (независимо от того, генерируются исключения или нет) будут обрабатываться за вас - это RAII.
Looks like you are overthinking it.
Rather than useing try {} catch {} use the RAII.
There are several ways to do this looking through the comments (all seem valid).
Option 1:
If you just need a single fixed(or expanding set of ArrType).
Where the lifespan ends at the end of the function
std::vector<ArrType>
Option 2:
If you need multiple arrays of ArrType
Where the lifespan ends at the end of the function
boost::ptr_vector<ArrType>
This also allows you to remove the array from the ptr_vector when the object has a longer lifespan.
Вы должны использовать технологию RAII. Вы делегируете уничтожение другому объекту, который создаете в стеке.
Затем, когда этот объект выходит за пределы области видимости, он освобождает все, независимо от того, когда он выходит за пределы области видимости, даже за исключением.