Home > Blockchain >  Is gsl::owner usable for shared-ownership?
Is gsl::owner usable for shared-ownership?

Time:01-17

For example, can it be used in Qt for the following?

gsl::owner<QWidget*> w{new QWidget{parent}}

In this example, the ownership is shared by the new-site and the parent, because the code who has new-ed the object can delete w, and W's destructor will take itself out of parent children list. However, if w is not deleted at the new-site, then parent will delete it in its destructor.

  1. Is this an example of shared ownership, and
  2. can gsl::owner be used for it?

CodePudding user response:

Is this an example of shared ownership

No, you have two places claiming unique ownership.

can gsl::owner be used for it

If w can outlive the object pointed to by parent, then it might become invalid, leading to undefined behaviour.

If you want a pointer type that interfaces with Qt's parent-child ownership, use QPointer

CodePudding user response:

In this example, the ownership is shared by the new-site and the parent, because the code who has new-ed the object can delete w, and W's destructor will take itself out of parent children list. However, if w is not deleted at the new-site, then parent will delete it in its destructor.

This is wrong. The code that has created this object should not delete it unless it is absolutely sure that the parent is still alive, otherwise you will get double-free errors (because parent would have freed the object already).

The correct solution is to use QPointer as mentioned in the other answer.

  • Related