コンテンツにスキップ

C++/改廃された技術

出典: フリー教科書『ウィキブックス(Wikibooks)』
< C++

改廃された技術

[編集]

C++の改廃された技術や利用が推奨されない技術は、言語標準の進化、新しい要求、セキュリティ上の懸念などによって置き換えられます。以下に、代表的な技術を示します。

auto_ptr

[編集]
  • サポート開始年: 1998年(C++98)
  • サポート終了年: 2017年(C++17で完全削除)
廃止または衰退の理由
コピーセマンティクスの問題や、ムーブセマンティクスのサポート不足により、予期せぬ動作を引き起こす可能性がありました。
代替技術
unique_ptr、shared_ptr、weak_ptrなどのモダンなスマートポインタが推奨されます。

std::random_shuffle

[編集]
  • サポート開始年: 1998年(C++98)
  • サポート終了年: 2017年(C++17で削除)
廃止または衰退の理由
内部で使用する乱数生成器が実装依存であり、移植性や再現性に問題がありました。
代替技術
std::shuffle と <random> ライブラリの乱数生成器の組み合わせが推奨されます。

std::strstream

[編集]
  • サポート開始年: 1998年(C++98)
  • サポート終了年: deprecated in C++98
利用推奨されない理由
メモリ管理の問題や使いにくさがあり、より安全で柔軟な代替手段が存在するため。
代替技術
std::stringstream、std::ostringstream、std::istringstream が推奨されます。

throws指定子

[編集]
  • 対象: 関数宣言での例外指定
  • サポート終了年: 2017年(C++17でdynamic exception specifications削除)
廃止または衰退の理由
実行時のオーバーヘッド、保守性の問題、例外仕様の厳格さによる柔軟性の欠如。
代替技術
noexcept指定子の使用が推奨されます。

std::binary_function と std::unary_function

[編集]
  • サポート開始年: 1998年(C++98)
  • サポート終了年: 2017年(C++17で削除)
廃止または衰退の理由
ラムダ式やstd::functionの導入により、より柔軟な関数オブジェクトの定義が可能になったため。
代替技術
ラムダ式、std::function、カスタム関数オブジェクトが推奨されます。

register キーワード

[編集]
  • サポート開始年: C言語から継承
  • サポート終了年: 2017年(C++17でストレージクラス指定子として廃止)
廃止または衰退の理由
最新のコンパイラは自動的に最適な変数の配置を決定できるため、キーワードとしての意味が失われました。
代替技術
コンパイラの最適化に任せることが推奨されます。

std::allocator の古いメンバー関数

[編集]
  • 対象: construct()、destroy() など
  • サポート終了年: 2020年(C++20で削除)
廃止または衰退の理由
より型安全で効率的なメモリ管理手法の導入により、古い手法が不要になりました。
代替技術
construct_at、destroy_at などの新しいメモリ管理関数が推奨されます。

raw ポインタによるメモリ管理

[編集]
  • サポート開始年: 言語の開始時から
  • サポート終了年: なし(ただし非推奨)
廃止または衰退の理由
メモリリーク、ダングリングポインタなどの問題を引き起こしやすく、安全性に欠けます。
代替技術
スマートポインタ(unique_ptr、shared_ptr)、STLコンテナの使用が推奨されます。

std::iterator クラス

[編集]
  • サポート開始年: 1998年(C++98)
  • サポート終了年: 2017年(C++17でdeprecated)
廃止または衰退の理由
イテレータの実装が複雑化し、基底クラスとしての有用性が低下したため。
代替技術
イテレータ要件を満たすカスタムクラスの直接実装が推奨されます。

std::codecvt

[編集]
  • サポート開始年: 2011年(C++11)
  • サポート終了年: 2017年(C++17でdeprecated)
廃止または衰退の理由
設計上の問題や実装の複雑さにより、効果的な文字コード変換が困難でした。
代替技術
外部ライブラリ(ICU、Boost.Locale)や、OS固有のAPI使用が推奨されます。