0

cstdlib malloc()およびfree()関数の上にカスタム メモリ アロケータを作成しています(パフォーマンス上の理由から)。アロケータは、いくつかのメモリ バッファとその他のパラメータを格納する単純なクラス内にあります。メモリを解放するメソッドにfree ()という名前を付けたいのですが、クラス内からcstdlib のfree()を使用できるようにする必要があります。

#include <cstdlib>

inline void cstdlib_free(void * M){ free(M); } // Works, but is ugly!

class MyAllocator{

    /* ... */

    // Does internal class operations; Does NOT use stdlib's free 
    free(void * _Memory){ /* ... */ }

    // Frees buffers to system memory; USES stdlib's free
    clear(void){
        /* ... */
        cstdlib_free(Buff); // THIS is what I want to change
        /* ... */
    }
};

今のところ、cstdlib の free() のラッパーを作成することでこれを解決しましたが、もっと良い解決策があるはずだと思わずにはいられません (また、クラスの free() メソッドの名前を変更したくありません。名前は一貫している必要があります)。この質問の最初の回答に沿った解決策、つまり cstdlib の基本クラスを使用してfree()にアクセスすることを望んでいました。

C++ は、標準 C 関数にクラス構造としてアクセスする方法を提供していますか? クラス宣言の直下でスコープを使用したいことをコンパイラーに伝える方法はありますか (この場合は存在しないスーパークラスではありません!)?

4

1 に答える 1

2

はい、どのような状況でもオリジナルfreeにアクセスできstd::freeます。偏執的になりたい場合は、別の修飾子を追加して使用します::std::free

::freeグローバル名前空間から取得します。これは同じ関数である必要がありますが、std::優先されます。ではなく、::freeあなたでない限り、存在することは保証されません。#include <stdlib.h><cstdlib>

于 2013-02-22T00:59:36.627 に答える