私は次のコードを理解しようとしています。
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
ある種のメソッドと、デストラクタから呼び出されるメソッドがあります。lock
unlock
このクラスの目的は、lock_server
RAIIと呼ばれるものを実装することです。これは愚かな頭字語ですが、実際には自動化されたリソース管理を意味します。オブジェクトがスコープを離れると、デストラクタがキックして、保持しているリソースを解放します。この場合は、rsm
物体。
これは、クラスのオブジェクトへのポインタrsm
です。
クラスが以前に定義/宣言さclass
れている限り、キーワードはオプションです。rsm
ただし、ソースのポイントでクラスが以前に宣言されていない場合は、class
キーワードが必要です。この場合、rsm
不完全なクラス型として宣言されています。