0

Exception Safety Guarateesについて説明し、 Strong Guaranteeを提供すると思われる例を考案しました。

template<typename E, typename LT>
void strongSort(vector<E*> &data, LT lt) // works on pointers
{
  vector<E*> temp { data };  // bad_alloc? but 'data' not changed. 
  sort(temp.begin(), temp.end(), lt); // 'lt' might throw!
  swap(temp, data); // considered safe.
}

簡単な (C++0x)-これがどのように使用されるかの例:

int main() {
  vector<int*> data { new int(3), new int(7), new int(2), new int(5) };
  strongSort( data, [](int *a, int *b){ return *a<*b;} );
  for(auto e : data) cout << *e << " ";
}

LT要素を変更しないと仮定しますが、スローされる可能性があります。コードが提供するものであると仮定するのは正しいですか

  • 強力な例外安全保証
  • Exception Neutralであり、 wrt toLT
4

2 に答える 2

1

はい。強力な例外保証は、操作が正常に完了するか、データが変更されないことを意味します。

例外中立とは、例外を伝播させることを意味します。

于 2011-08-07T12:56:47.203 に答える
0

例外安全です。より安全にするために、なぜ使用しないのですかvector<shared_ptr<int>>

template<typename Type, typename Func>
void StrongSort( vector<shared_ptr<Type>>& elems, Func fun)
{
    vector<shared_ptr<Type>> temp ( elems.begin(), elems.end());
    sort(temp.begin(), temp.end(), fun);
    swap(elems, temp);
}

vector<shared_ptr<int>> ints;
ints.push_back(shared_ptr<int>(new int(3)));
ints.push_back(shared_ptr<int>(new int(1)));
ints.push_back(shared_ptr<int>(new int(2)));
StrongSort(ints, [](shared_ptr<int> x, shared_ptr<int> y) -> bool { return *x < *y; });
于 2011-08-07T13:10:57.100 に答える