私はcとcppを含む大規模なアプリケーションで作業しています。すべてのファイルは cpp 拡張子として保存されますが、コードは c-style で記述されています。つまり、malloc と realloc と calloc を介してメモリを割り当てるクラスではなく、構造を定義するということです。最近、boost ライブラリがインストールされたので、既存のコード ベースに使用する予定です。
- std::shared_ptr を malloc と free で使用できますか。
- はいの場合、サンプルコードベースを教えてもらえますか?
- アプリケーションで std::shared_ptr を作成し、このポインタを malloc または calloc を使用する別の関数に渡すと、機能に影響がありますか?
または言い換えれば:
次のコードで、std::shared_ptr を使用して同様の機能を実現するにはどうすればよいですか。
void allocateBlocks(int **ptr, int *cnt)
{
*ptr = (int*)malloc(sizeof(int) * 10);
*cnt = 10;
/*do something*/
}
int main()
{
int *p = NULL;
int count = 0;
allocateBlocks(&p, &count);
/*do something*/
free(p);
}
ダブルポインターを受け入れ、アプリケーション内の構造体を埋め、malloc を使用するいくつかの関数を呼び出します。これらのポインタを std::shared_ptr に割り当てることはできますか? 例えば:
typedef struct txn_s
{
int s;
int d;
int *e;
} txn_t;
typedef boost::shared_ptr<txn_t> tpointer;
tpointer((txn_t*)::malloc(sizeof(txn_t),::free));