-9

この質問は、一部の人々にとって本当の質問とは思えなかったため、クローズされました。それ以来、質問の本文を更新しましたが、今は少し良くなっているかもしれません。しかし、私の仕事であり、この分野の研究であるため、この質問をどのように改善できるかを皆さんが提案してくれることを期待しています.

RAII (Resource Allocation is Initialisation) 理論では、MMU からメモリを借用した場合、それを戻す (新規および削除) 必要があると規定されています。ただし、C++ で不適切な初期化を行っていた場合に、結果が生じるのではないかと考えていました。

次のようにするとどうなりますか。

double* pp1 = 0;
double* pp2 = 0;

そして、必要な場所で pp1 と pp2 を使用しますか? 標準的なプログラミングの実践に従ってポインタを初期化するのは間違った方法ですか? または、まったく初期化されています。new初期化は完全にオペレーターに依存していますか?

また、次のような設計では、ポインターをどの程度使用する必要がありますか。

1) リアルタイム 2) セーフティ クリティカル 3) ミッション クリティカル

また、32 ビット マシンと 64 ビット マシンで同じ C/C++ アプリケーションを実行すると、奇妙な結果が得られます。ポインターをいじっていると、マシンがどれだけ遅くなるかパフォーマンスが低下するか。設計で使用するポインタが多すぎるため、マシンの速度が低下しているためです。一部の「明らかな」秘密保持契約については、ここにコードを入れることはできません。申し訳ありません。明確にするために、結果を返す直前にすべてのメソッドで使用されているすべてのポインターを削除しています。つまり、メモリ管理はバランスが取れており、スタックオーバーフローの問題が発生しないほど効率的です。

これらの質問はあまりにも自由すぎるかもしれませんが、詳細な回答を見つけるために (Google、MISRA C++、British Computer Society、および IEEE) も調査しています。私の考えは、ポインターをあまり使わずに C++ でプログラミングする方法を実際に研究し、開発することです。

明白な答えは、「ポインターを使用して PC の MMU の悪用を停止できるように C++ でプログラミングする」ということです。でも、違う考えを持っている人がいたら、それについて聞きたいです。

4

1 に答える 1

6

ポインターを使用する最も適切な方法はどれですか?

この場合、答えはそれらをまったく使用しないことです。何が問題なの

double p1 = 1.1;
double p2 = 2.2;

必要に応じて、それらをスマート ポインターでラップします。

スマート ポインターを使用してメモリ リークを防止します。

std::unique_ptr<double> pp1;

生のポインターを使用する必要がある場合 (疑わしい)、次のように初期化しnullptrます。

またはnullptrより優先:NULL0

double* pp1 = nullptr;
double* pp2 = nullptr;

有効な場所を指すようにするまで、ポインターを逆参照することはできません。

pp1 = new double(1.1);

*pp1; //VALID
*pp2; //UNDEFINED BEHAVIOR - pp2 is still nullptr
于 2012-11-05T10:15:17.883 に答える