ちょっと整理しなおしておこう。
漏れが言いたいのは、まず↓は明らかに無駄だって事。
 class Data {
  public: void SaveToFile() {
   open();
   write();
   close();
  };
  private:
   void open(){ m_pFile->open(); }  //←こーいうのが
   void write(){ m_pFile->write(); }  //←無駄だと
   void close(){ m_pFile->close(); }  //←言いたい
   File* m_pFile;
 };

だけど、↓は辛うじて許容されると思う。(設計の良し悪しは別として)

 void opendata(){ m_pFile->open( m_datafile_path ); }

両者の違いは何か?と言う理由を考えたとき、一番単純明快な理由が
前者はオブジェクト指向的に間違ってるという事。
open/write/closeは明らかにFileに対する操作であって、
Dataに対する操作ではない。Dataだけが行う操作でもないし、
DataはFileの別称または総称でもない。

一方、後者はDataだけが行う操作。主体はデータファイルだから
原則を徹底するなら別クラスとして切り離すべきだけど、
その場合クラスの粒度が細かくなりすぎる。

一言でまとめるなら、「無駄なたらい回し」は何を持って無駄か?ってのは、
オブジェクト指向的にどこまでが妥当か?で判断すりゃ良いんじゃないかと
言いたかった。