C++言語のheaderファイルについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
EU

C++言語のheaderファイルについて

#1

投稿記事 by EU » 2年前

ライブラリを利用するユーザの開発環境に提供するライブラリのheaderファイルは
必ずしもそのライブラリを実装するに利用するheaderとまったく同じにする必要はないですね?

例えば、classの[private]部分をユーザに提供するheaderファイルから削除しても理論上問題ない?

ご教授お願いします

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: C++言語のheaderファイルについて

#2

投稿記事 by YuO » 2年前

ヘッダーファイルを同一にする必要は無いですが,クラスの構造は同じにする必用があります。
クラスの構造とは,基底クラスの宣言の順序,メンバ変数の宣言の順序、仮想関数の宣言の順序などです。
public/protected/privateの順序を入れ替える,などもやってはいけません。

現実的な問題点としては,クラスの宣言を元にコンパイラは必要なメモリの量を決定するため,private変数を削るとコンパイラはメモリの量を少なく見積もってしまう,ということがあります。
結果として,変数へのアクセスが確保していないメモリへのアクセスになる可能性がでてきます。

EU

Re: C++言語のheaderファイルについて

#3

投稿記事 by EU » 2年前

さっそくお返答ありがとうございます。
>public/protected/privateの順序を入れ替える,などもやってはいけません。

確か自分に以前この辺にかかる問題が起きた事があったような記憶がありますが、
具体にどういうわけ分かりませんでした。
理由を教えていただけませんか。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: C++言語のheaderファイルについて

#4

投稿記事 by YuO » 2年前

ちゃんと調べ直したところ,ちょっと古いですが,
ISO/IEC 14882:2003 さんが書きました:11 Member access control - 11.1 Access specifiers
2 The order of allocation of data members with separate access-specifier labels is unspecified
という記述がありました。
これを勘違いしていたようです。

ただ,割り当て順が変わればパディングが変わる可能性があるため,クラスのサイズが変化する可能性は十分あり得ます。

もし,目的がクラスの実装を見せたくない,やヘッダファイルの参照が深くなることが問題,といったことならpimplイディオム使うなどして隠すという方法を使うのがよいかと思います。

返信

“C言語何でも質問掲示板” へ戻る