Используя больше STL, ваш код может даже стать
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T>
class sorted_array_view {
public:
sorted_array_view(T* const givenArray, size_t size)
: data(givenArray, givenArray + size)
, originaldata(givenArray, givenArray + size)
, givenArray(givenArray)
{
std::sort(data.begin(), data.end());
std::copy(std::cbegin(data), std::cend(data), givenArray);
}
~sorted_array_view() {
std::copy(std::cbegin(originaldata), std::cend(originaldata), givenArray);
}
private:
std::vector<T> data;
std::vector<T> const originaldata;
T* const givenArray;
};
#include <array>
#include <iostream>
int main()
{
std::array<int, 5> givenArray = { 4, 3, 5, 1, 2 };
{
sorted_array_view<int> sortTemp(&givenArray[0], givenArray.size());
for (const auto& el : givenArray) std::cout << el << " "; std::cout << "\n";
}
for (const auto& el : givenArray) std::cout << el << " "; std::cout << "\n";
}
Выход:
1 2 3 4 5
4 3 5 1 2
живой пример
Но опасно делать слишком много в вашем конструкторе / деструкторе. Вы не можете выбросить исключение из деструктора. edit: см. Комментарий Peter.