私の経験を伝える前に、いくつかのCプロジェクトをC++に移植したので:
あなたが本当に意味しているのは、「すでに正常に動作するコードからクラスとオブジェクトを作成する」ことであると思いC
ますC++
. それはおそらくあなたがしていることです。移植を行う理由は、コードをより再利用可能で保守しやすくするためだと思います。これは中規模から大規模のプロジェクト (少なくとも 10000 LOC) であると想定していることに注意してください。
もしそうなら、私はあなたが直面するいくつかの問題を想像することができますが、一般的に C++ で遭遇する問題でもあります:
作成時に新たに導入されたバグ
'OO'**
C は手続き型であるため、C++ のオブジェクトの意味で何が「再利用可能」であるかについての判断が求められます。おそらく、最初の観察が間違っていたことに気付くことがあります。コードがコンパイルされないからではなく、ロジックが以前と同じように実行されないためです。その場合: 基本的な C++ オブジェクトが C プログラムの元の意図したロジックを壊していないことがわかっている場合は、テスト、テスト、テスト (段階的に) を行い、最後に設計パターンを使用して凝ったリファクタリングをすべて実行します。
メモリ管理の問題
C のmalloc
andfree
と C++ のnew
anddelete
は、非常に異なることを行います。C++ オブジェクトの割り当てがどうなるかは、C コードが何を行っているかについての理解をどのように再解釈したかに大きく依存するため、両方に非常に熟練している必要があります。しかし、最初は、malloc と free の呼び出しを保持し、特に理由がない限り、C++ でそれらを抽象化します。したがって、クラスが作成され、メモリの割り当てと割り当て解除が行われると、アプリケーションでメモリ リークが発生します。これは保証であり、段階的にテストする必要があるまさにその理由です。
リファクタリングとデザイン パターン
コードをより「リート」にするために、継承と設計パターンに夢中になりたいという誘惑が時々あると思います。デザインパターンは本質的にコードを最適化してより効率的で保守しやすいようにするための方法であるため、移植の開始時にこの誘惑に抵抗するようにしてください。リファクタリングと「今はうまくいかない」と「変更する必要がある前に間違ったデザインパターンを使用しました」...ご覧のとおり、非常に迅速に制御不能になる可能性があるため、一度に1つのことを行うことに集中してください圧倒されないように、移植プロセスにバグがなく、気楽に行えるようにしてください。
グローバル
グローバルを分割し、そのスコープをどこで制限するかを決定する必要があります。単純な C++ オブジェクトを一度に 1 つずつ作成することで、C コードの意味と機能を保持するようにしてください。名前空間、継承、デザイン パターンなどの点で凝ったものは何もありません。ここでも、コードがクラスに変換された後に実行することをお勧めします。 .