Boost logo

Boost Users :

From: François Duranleau (duranlef_at_[hidden])
Date: 2007-04-26 11:44:49


On Wed, 25 Apr 2007, Michael Marcin wrote:

[...]
> I originally wrote that using a scoped_array to document the lifetime,
> ownership, and type of data pointed to. And so I didn't have to worry about
> things like forgetting to call delete[] instead of delete. I figured that
> any compiler worth using should inline this out to the same code as the
> "optimized" version but I have no proof of that I was hoping someone would
> have done simple tests comparing generated code that I could reference when
> I discuss these "improvements" with the team later this week.
[...]

I did a simple test (code below). By changing delete to delete[] and
compiling as (using gcc-4.0.3)

g++ -o test_n test.cpp -O3

and

g++ -o test_b test.cpp -O3

and then disassembling the two binaries (objdump -d ...) and comparing the
generated code, I could see that the generated code for the 'test'
function was identical in both case. The code is of course a little bit
different between delete and delete[].

#include <iostream>

#ifdef USE_BOOST
#include <boost/scoped_array.hpp>

class Context
{
public:
     Context( unsigned int width, unsigned int height )
         : m_buffer( new unsigned int[width*height] )
     {
     }

     unsigned int* GetBuffer() { return m_buffer.get(); }
private:
     boost::scoped_array<unsigned int> m_buffer;
};

#else

class Context
{
public:
     Context( unsigned int width, unsigned int height )
         : m_buffer( new unsigned int[width*height] )
     {
     }
     ~Context()
     {
         delete[] m_buffer;
     }

     inline unsigned int* GetBuffer() { return m_buffer; }
private:
     unsigned int* m_buffer;
};

#endif

void test()
{
     Context ctx( 20 , 20 ) ;
     ::std::cout << ctx.GetBuffer() ;
}

int
main()
{
     test() ;
     return 0 ;
}

-- 
François Duranleau
LIGUM, Université de Montréal

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net