std :: shared_ptrとstd :: functionをカスタム削除およびアロケーターとして使用

generic_opto_guy

これを機能させる方法はありますか?

#include <functional>
#include <memory>
int main()
{
    std::function<unsigned char*(size_t)> allocator 
    = [](size_t size){
        return new unsigned char[size];
    };    
    std::function<void(unsigned char*)> deleter 
    = [](unsigned char* ptr){
        delete[] ptr;
    };
    std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
    return EXIT_SUCCESS;
}

エラーが発生します:

main.cpp: In function ‘int main()’:
main.cpp:15:49: error: ‘deleter’ is not a type
     std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
                                                 ^~~~~~~
main.cpp:15:57: error: ‘allocator’ is not a type
     std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
                                                         ^~~~~~~~~

もう少しコンテキスト:

いくつかのメモリを保持するテンプレートクラスがあります。これは、カスタムアロケーターとデリッターで作成されたshared_ptrを使用して行われます。AllocatorとDeleterは、クラスのテンプレートパラメータではありません。

ここで、サイズ変更メソッドをクラスに追加したいと思います。新しいアロケーターとデルターを提供する必要を避け、それらをに保存したいと思いstd::functionます。

lars

アロケータはデータ割り当てを処理することは想定されておらず、shared_ptrの内部データの割り当てを処理する必要があります。

コンストラクターへの最初の引数として、すでに割り当てられているデータを提供する必要があります。shared_ptrメモリのクリーンアップのみを処理します。

さらに、shared_ptrのテンプレート引数は、間接参照のない型である必要があります

#include <functional>
#include <memory>
int main()
{
    std::function<void(unsigned char*)> deleter 
    = [](unsigned char* ptr){
        delete[] ptr;
    };
    std::shared_ptr<unsigned char> mem(new unsigned char[5], deleter);
    return EXIT_SUCCESS;
}

ラムダを優先する必要がある場合はstd::function、コンパイラに最適化の可能性を残します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

std :: enable_ifおよびstd :: shared_ptr

分類Dev

std :: shared_ptrとstd :: experimental :: atomic_shared_ptrの違いは何ですか?

分類Dev

How to do function overloading with std::shared_ptr<void> and another type of std::shared_ptr?

分類Dev

継承とスマートポインター(std :: shared_ptr)

分類Dev

std :: shared_ptrデータの割り当てとmemcpy

分類Dev

* thisをstd :: shared_ptrとして使用します

分類Dev

std :: shared_ptrとstd :: threadを使用したコンパイラエラー

分類Dev

std :: shared_ptr :: unique()、コピーとスレッドセーフ

分類Dev

std :: shared_ptr(s)とメモリリーク

分類Dev

std :: shared_ptr削除者タイプ

分類Dev

std :: arrayを引数として持つstd :: make_sharedを使用してstd :: shared_ptrを初期化する

分類Dev

CComPtrとstd :: shared_ptrの相互運用性

分類Dev

std :: shared_ptrを使用したQVariant

分類Dev

std :: shared_ptrとラムダをベクターに挿入する

分類Dev

C ++ std :: shared_ptrを理解する

分類Dev

boost :: shared_ptrの代わりにstd :: shared_ptrを使用するとコンパイルが失敗する

分類Dev

boost :: shared_ptr / std :: shared_ptrをboost :: object_poolと一緒に使用する方法は?

分類Dev

boost :: shared_ptr / std :: shared_ptrをboost :: object_poolと一緒に使用する方法は?

分類Dev

std :: shared_ptr <void>からstd :: shared_ptr <T>を初期化します

分類Dev

std :: shared_ptr <char>をstd :: shared_ptr <unsignedchar>に変換します

分類Dev

std :: shared_ptr:カスタム削除機能を備えたtypedef

分類Dev

std :: weak_ptrと対応するstd :: shared_ptrの間にデータの競合はありますか?

分類Dev

std :: tr1 :: shared_ptr <T>とstd :: shared_ptr <T>を同じ関数で異なるオーバーロードでキャストする

分類Dev

シャドウイングにstd :: weak_ptrとstd :: shared_ptrを使用する

分類Dev

std :: shared_ptr vs std :: make_shared:予期しないキャッシュミスと分岐予測

分類Dev

std::shared_ptr and Inheritance

分類Dev

std::shared_ptr initialization

分類Dev

std :: unique_ptrとstd :: shared_ptrの破壊動作の違いの理由は何ですか?

分類Dev

std :: unique_ptrおよびstd :: shared_ptrの所有権を取得する方法

Related 関連記事

  1. 1

    std :: enable_ifおよびstd :: shared_ptr

  2. 2

    std :: shared_ptrとstd :: experimental :: atomic_shared_ptrの違いは何ですか?

  3. 3

    How to do function overloading with std::shared_ptr<void> and another type of std::shared_ptr?

  4. 4

    継承とスマートポインター(std :: shared_ptr)

  5. 5

    std :: shared_ptrデータの割り当てとmemcpy

  6. 6

    * thisをstd :: shared_ptrとして使用します

  7. 7

    std :: shared_ptrとstd :: threadを使用したコンパイラエラー

  8. 8

    std :: shared_ptr :: unique()、コピーとスレッドセーフ

  9. 9

    std :: shared_ptr(s)とメモリリーク

  10. 10

    std :: shared_ptr削除者タイプ

  11. 11

    std :: arrayを引数として持つstd :: make_sharedを使用してstd :: shared_ptrを初期化する

  12. 12

    CComPtrとstd :: shared_ptrの相互運用性

  13. 13

    std :: shared_ptrを使用したQVariant

  14. 14

    std :: shared_ptrとラムダをベクターに挿入する

  15. 15

    C ++ std :: shared_ptrを理解する

  16. 16

    boost :: shared_ptrの代わりにstd :: shared_ptrを使用するとコンパイルが失敗する

  17. 17

    boost :: shared_ptr / std :: shared_ptrをboost :: object_poolと一緒に使用する方法は?

  18. 18

    boost :: shared_ptr / std :: shared_ptrをboost :: object_poolと一緒に使用する方法は?

  19. 19

    std :: shared_ptr <void>からstd :: shared_ptr <T>を初期化します

  20. 20

    std :: shared_ptr <char>をstd :: shared_ptr <unsignedchar>に変換します

  21. 21

    std :: shared_ptr:カスタム削除機能を備えたtypedef

  22. 22

    std :: weak_ptrと対応するstd :: shared_ptrの間にデータの競合はありますか?

  23. 23

    std :: tr1 :: shared_ptr <T>とstd :: shared_ptr <T>を同じ関数で異なるオーバーロードでキャストする

  24. 24

    シャドウイングにstd :: weak_ptrとstd :: shared_ptrを使用する

  25. 25

    std :: shared_ptr vs std :: make_shared:予期しないキャッシュミスと分岐予測

  26. 26

    std::shared_ptr and Inheritance

  27. 27

    std::shared_ptr initialization

  28. 28

    std :: unique_ptrとstd :: shared_ptrの破壊動作の違いの理由は何ですか?

  29. 29

    std :: unique_ptrおよびstd :: shared_ptrの所有権を取得する方法

ホットタグ

アーカイブ