私は次のコードを理解しようとしています。
lock_server::lock_server(class rsm *_rsm)
{
//code
}
これがクラスのコンストラクターであることは知っていますが、その引数がわかりません。これはクラスを指すポインタ(名前は_rsm)だと思いますか?それは理にかなっていますか?これに関するドキュメントはどこにありますか?
classまたはstructキーワードは、タイプを指定するときにC ++ではオプションであり、通常は省略されます。
つまり、次の関数には同等のシグネチャがあります。
class mytype { ... };
void f(mytype* data); // compiler "understands" that mytype is a class
void g(class mytype* data);
問題のクラスが事前に宣言されていない場合は、単語を含める必要がありますclass。
class用語の前のキーワードrsmは、C ++では必要ありません(単語を指定する必要があるCとは異なりますstruct)。
しかし、それは禁止されているという意味ではなく、ある種のタイプであることが直感的であるにもかかわらず、それが良いスタイルであると感じたと書いた人は誰でもrsm(必ずしもクラスではなく、クラスのtypedefになる可能性があります)
このコンストラクターの目的はlock_server、変更可能なオブジェクトへのポインターを使用して型のオブジェクトを作成することrsmです。私の推測では、コンストラクタから呼び出されるrsmある種のメソッドと、デストラクタから呼び出されるメソッドがあります。lockunlock
このクラスの目的は、lock_serverRAIIと呼ばれるものを実装することです。これは愚かな頭字語ですが、実際には自動化されたリソース管理を意味します。オブジェクトがスコープを離れると、デストラクタがキックして、保持しているリソースを解放します。この場合は、rsm物体。
これは、クラスのオブジェクトへのポインタrsmです。
クラスが以前に定義/宣言さclassれている限り、キーワードはオプションです。rsm
ただし、ソースのポイントでクラスが以前に宣言されていない場合は、classキーワードが必要です。この場合、rsm不完全なクラス型として宣言されています。