basic_stringのアロケーション

[戻る]
ガラ 2008/04/03(木) 08:46:49
OS XP、VC++6.0
自前のリードメソッドをつくってみたのですが、
basic_stringで定義したバッファをアロケートしてから、CFile::Read()
にわたしたいのですが、assign()しか考え付きません。
値を入れている分、無駄なことしているように思えるのですが、
みなさんは、どうされていますでしょうか?

void CSGARA::Read(LPCTSTR aFileName)
{
    CFile wFile(aFileName,CFile::modeRead | CFile::typeBinary) ;
    basic_string<UCHAR> wReadBuffer ;

    wReadBuffer.assign(0x00,wFile.GetLength()) ;

    wFile.Read(&wReadBuffer[0],wFile.GetLength()) ;
    wFile.Close( ) ;
}

tetrapod 2008/04/03(木) 09:30:28
まずはその assign の使い方合ってるかい?

assign は置換を行うわけで、そういう意味では無駄
resize, reserve っつメンバが存在するけどそっちを使うべきだろう
resize と reserve のどっちが適切かは basic_string の使い方次第

assign にせよ resize にせよ「入るべき値を指定しない」手段は無いわけで
そういう意味ではどっちも無駄だけどさ
reserve は、使い方によっては呼んでも意味が無いかもしれない

バッファ用途には vector のほうが多用されているような気がするが・・・

επιστημη [HomePage] 2008/04/03(木) 10:04:57
> 値を入れている分、無駄なことしているように思えるのですが、
> ファイルIOのスピードに比べりゃゴミにもならんので気にしない。

僕ならコンストラクタでサイズ確保。
    CFile wFile(aFileName,CFile::modeRead | CFile::typeBinary) ;
    basic_string<UCHAR> wReadBuffer(0x00,wFile.GetLength()) ;

tetrapod 2008/04/03(木) 10:23:45
その basic_string コンストラクタの使い方間違ってねぇ?
basic_string::basic_string(size_type n, charT c, const allocator& a=A())
だと思うが

επιστημη [HomePage] 2008/04/03(木) 10:31:54
いたたたた、逆です。すんません。

ガラ 2008/04/03(木) 13:35:17
[[解決]]
tetrapodさん、επιστημηさん、いつもありがとうございます。
あとで、気に入らないと、何度も直すほうなので、
こうゆう、アドバイスは、非常にたすかります。

古いスレッドには追加発言できません。