Re: Is avoding calling default constructor possible?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Łukasz Lew wrote:
> 
> Hi,
> 
> Is it possible to create array of objects T without calling the
> default constructors T::T() ?
> Calling other constructor instead would be great.
> Leaving the memory uninitalize is ok as well, as I can do placement new
> later.
> 
> I want to avoid char* casting to T* because it breaks strict aliasing
> rules
> (stopping optimizations from happening and slowing my program by 25%.)
> 
> Answer to this question would provide walkaround to the aliasing
> problem I described few days ago.
> 
> Thanks in advance for any ideas
> Lukasz Lew
> 
> 
> PS
> Manual says that uinon is the way to go with strict-aliasing, but
> unfortunately:
> 
> union {
>   char tab [N * sizeof(Elt)];
>   Elt tab2 [N];
> };
> 
> Doesn't compile because Elt *has* default constructor.
> 
> 

Yes, you can do
> blah = new foo(a,b);
and
> blah = new foo[c];
but not
> blah = new foo(a,b)[c];

How stupid. Though you can get the same effect by
> foo bar(a,b);
> blah = malloc(c * sizeof(foo));
> for (int k=0; k<c; k++) blah[k] = foo;
where the copy assignment operator is the one made by the compiler, which
copies data members with their own copy assignment operators.
-- 
View this message in context: http://old.nabble.com/Is-avoding-calling-default-constructor-possible--tp26157694p29621728.html
Sent from the gcc - Help mailing list archive at Nabble.com.




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux