[Bug libstdc++/64399] New: g++ does not diagnose when upcasting owning pointer (e.g. unique_ptr) with non-virtual destructor
mw_triad at users dot sourceforge.net
gcc-bugzilla@gcc.gnu.org
Tue Dec 23 22:58:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64399
Bug ID: 64399
Summary: g++ does not diagnose when upcasting owning pointer
(e.g. unique_ptr) with non-virtual destructor
Product: gcc
Version: 4.8.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: mw_triad at users dot sourceforge.net
Consider the following code:
#include <memory>
struct X { ~X(); };
struct Y : X { ~Y(); };
std::unique_ptr<Y> f();
void g()
{
std::unique_ptr<X> x = f();
}
This code is almost certainly broken; ownership of the constructed Y is
transferred to an owning unique_ptr in a way that will most likely (in general;
"always" in this specific example) result in Y's destructor never being called.
It seems pretty silly that there is no diagnostic for this. There ought to be a
warning in unique_ptr's conversion operator converting from Derived to Base if
~Base is not virtual. (Arranging at the library level to trip
-Wnon-virtual-dtor seems logical.)
More information about the Gcc-bugs
mailing list