Skip to content
  • 0 Votes
    16 Posts
    2k Views
    S

    @chessking5544 said in Cannot create QImage using smart pointers:

    Will c++ smart pointers work, or is there just no way to do this?

    Just for completeness I will answer this. But first I have to agree with the others that you should allocate QImage on the stack. Good C++ style avoids pointers wherever possible. The best lifetime management is variables on the stack. Containers - and in this case I will count QImage as a container - will internally allocate memory on the heap. This is a good thing as your stack is quite small. I don't know C# well (but assume it has some similarity to Java within this respect), but objects do not need to be allocated using new in C++. If you want polymorphism you can use references instead of pointers. Rarely do you actually need pointers in C++.

    Now to the answer: C++ smart pointers work with every class. Just use it like this:

    std::shared_ptr<QImage> image = std::make_shared<QImage>(QSize(1920,1080), QImage::Format_RGB32);

    Note the use of make_shared here. This will automatically handle out-of-memory errors. Internally it will call new and hand down its parameters to the constructor of QImage. It is advised to use make_shared<QImage>(...) over shared_ptr<QImage>(new QImage(...)) (I can't remember all the reasons).

  • 0 Votes
    3 Posts
    2k Views
    L

    @SGaist Oh man exactly they forgot to include the
    #include <QPointer>

    Thnx for that help!