Calling C++ destructor directly in resourceHash.hpp
ioi.lam at oracle.com
Mon Jun 12 16:17:19 UTC 2017
On 6/12/17 12:16 AM, Thomas Stüfe wrote:
> On Mon, Jun 12, 2017 at 7:20 AM, John Rose <john.r.rose at oracle.com
> <mailto:john.r.rose at oracle.com>> wrote:
> On Jun 11, 2017, at 9:19 PM, Ioi Lam <ioi.lam at oracle.com
> <mailto:ioi.lam at oracle.com>> wrote:
> > I am looking at these two functions in "utilities/resourceHash.hpp":
> You are worried about the V destructor running,
> where the V struct is a member of Node (Node::_value).
> In the normal case, running the destructor of Node
> transparently runs the destructors of the K and V
> members of Node.
> The place where dropped destructors can happen
> in this sort of pattern is when you overwrite a variable,
> which is point (a) in your example. Your V::operator=
> is responsible for retiring any resources used by the
> previous value of Node::_value which are not going to
> be used by the new value.
> Eventually, when "delete node" happens, whatever
> resources were in use in Node::_value will be freed.
> So I don't think you have to do anything with point (b).
> Your problem, if you have one, is operator=. Those are
> hard to get right.
> — John
> Also, all usages of ResourceHashTable I can see have either primitive
> data types as value type or they do their own cleanup (e.g. Handle in
> jvmci). Do you see any concrete usage where a real object needing
> destruction is placed in a ResourceHashTable?
I am adding a new ResourceHashTable that needs destruction of the stored
object. And I found out that my destructor is not called.
More information about the hotspot-dev