0

私は次のコードを理解しようとしています。

lock_server::lock_server(class rsm *_rsm)
{
//code
}

これがクラスのコンストラクターであることは知っていますが、その引数がわかりません。これはクラスを指すポインタ(名前は_rsm)だと思いますか?それは理にかなっていますか?これに関するドキュメントはどこにありますか?

4

4 に答える 4

5

classまたはstructキーワードは、タイプを指定するときにC ++ではオプションであり、通常は省略されます。

つまり、次の関数には同等のシグネチャがあります。

class mytype { ... };

void f(mytype* data);       // compiler "understands" that mytype is a class
void g(class mytype* data);
于 2012-12-04T15:55:08.110 に答える
2

問題のクラスが事前に宣言されていない場合は、単語を含める必要がありますclass

于 2012-12-05T21:09:22.230 に答える
1

class用語の前のキーワードrsmは、C ++では必要ありません(単語を指定する必要があるCとは異なりますstruct)。

しかし、それは禁止されているという意味ではなく、ある種のタイプであることが直感的であるにもかかわらず、それが良いスタイルであると感じたと書いた人は誰でもrsm(必ずしもクラスではなく、クラスのtypedefになる可能性があります)

このコンストラクターの目的はlock_server、変更可能なオブジェクトへのポインターを使用して型のオブジェクトを作成することrsmです。私の推測では、コンストラクタから呼び出されるrsmある種のメソッドと、デストラクタから呼び出されるメソッドがあります。lockunlock

このクラスの目的は、lock_serverRAIIと呼ばれるものを実装することです。これは愚かな頭字語ですが、実際には自動化されたリソース管理を意味します。オブジェクトがスコープを離れると、デストラクタがキックして、保持しているリソースを解放します。この場合は、rsm物体。

于 2012-12-04T16:02:51.097 に答える
1

これは、クラスのオブジェクトへのポインタrsmです。

クラスが以前に定義/宣言さclassれている限り、キーワードはオプションです。rsm

ただし、ソースのポイントでクラスが以前に宣言されていない場合は、classキーワードが必要です。この場合、rsm不完全なクラス型として宣言されています。

于 2012-12-04T16:03:55.480 に答える