最終更新日時:
が更新

履歴 編集

function
<fstream>

std::basic_filebuf::コンストラクタ

basic_filebuf();                                  // (1) C++98
basic_filebuf(const basic_filebuf&) = delete;     // (2) C++11
basic_filebuf(basic_filebuf&& rhs);               // (3) C++11

概要

オブジェクトを構築する。

  • (1) : デフォルト構築。ファイルを開いていない状態のオブジェクトを構築する
  • (2) : コピー構築。この関数はdelete定義されており、basic_filebufオブジェクトはコピーできない
  • (3) : ムーブ構築。rhsが開いていたファイルの所有権を*thisに移動する

効果

  • (1) : 基底クラスをbasic_streambuf<CharT, Traits>()で初期化する
  • (3) :
    • *thisのシーケンスポインタ(eback(), gptr(), egptr(), pbase(), pptr(), epptr())がrhsの持っていた値を得るかどうかは、処理系定義である
    • それらの値を得るかどうかに関わらず、構築後の*thisrhsは(存在する場合)別々のバッファを参照する
    • *thisは構築前にrhsが参照していたファイルを参照し、rhsは構築後にいかなるファイルも参照しない
    • rhsのオープンモード、ロケール、その他の状態もコピーされる

事後条件

  • (1) : is_open()== false
  • (3) : コンストラクタ呼び出し前のrhsの状態をrhs_p、呼び出し後のrhsの状態をrhs_aと表記する
    • is_open()== rhs_p.is_open()
    • rhs_a.is_open()== false
    • gptr() - eback() == rhs_p.gptr() - rhs_p.eback()
    • egptr() - eback() == rhs_p.egptr() - rhs_p.eback()
    • pptr() - pbase() == rhs_p.pptr() - rhs_p.pbase()
    • epptr() - pbase() == rhs_p.epptr() - rhs_p.pbase()
    • eback()が非ヌルの場合、eback() != rhs_a.eback()
    • gptr()が非ヌルの場合、gptr() != rhs_a.gptr()
    • egptr()が非ヌルの場合、egptr() != rhs_a.egptr()
    • pbase()が非ヌルの場合、pbase() != rhs_a.pbase()
    • pptr()が非ヌルの場合、pptr() != rhs_a.pptr()
    • epptr()が非ヌルの場合、epptr() != rhs_a.epptr()

#include <iostream>
#include <fstream>
#include <utility>

int main()
{
  {
    std::filebuf out;
    out.open("test.txt", std::ios_base::out);
    out.sputn("Hello", 5);
  }

  // (1) ファイルを開いていない状態で構築する
  std::filebuf a;
  std::cout << std::boolalpha << a.is_open() << std::endl;

  a.open("test.txt", std::ios_base::in);

  // (3) aが開いていたファイルをbに移動する
  std::filebuf b = std::move(a);

  std::cout << a.is_open() << ' ' << b.is_open() << std::endl;
  std::cout << static_cast<char>(b.sbumpc()) << std::endl;
}

出力

false
false true
H

バージョン

言語

  • C++98

関連項目