http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58912

            Bug ID: 58912
           Summary: make_shared value initializes storage space even when
                    not desired
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cvs at cs dot utoronto.ca

Simple example:

struct foo {
    char buf[1024*1024*1024];
    foo() {}
};
auto p = std::make_shared<foo>();

I've traced the problem to shared_ptr_base.h and tested the following patch
(against 4.7.2) to resolve the problem:

--- shared_ptr_base.h.orig      2013-10-29 11:52:02.212301477 -0400
+++ shared_ptr_base.h   2013-10-29 11:52:20.620300707 -0400
@@ -394,7 +394,7 @@
     public:
       template<typename... _Args>
        _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
-       : _M_impl(__a), _M_storage()
+       : _M_impl(__a)
        {
          _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
          // _GLIBCXX_RESOLVE_LIB_DEFECTS

The problem appears to be in versions as new as 4.8.2.  

Is there a good reason why the storage space must be initialized?

Reply via email to