Re: Is avoding calling default constructor possible?

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

 



?ukasz Lew wrote:

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.

I don't really understand why you need this.  character types are special
in that they can alias all POD types.  Is the problem here that you're
trying to build a backing array of char type for a non-POD object?

Andrew.


3.9 Types

For any complete POD object type T, whether or not the object holds a
valid value of type T, the underlying bytes (1.7) making up the object
can be copied into an array of char or unsigned char. 36) If the
content of the array of char or unsigned char is copied back into the
object, the object shall subsequently hold its original value.

[Example:
#define N sizeof(T)
char buf[N];
T obj;                                 // obj initialized to its original value
memcpy(buf, &obj, N);                  // between these two calls to memcpy,
                                       // obj might be modified
memcpy(&obj, buf, N);                  // at this point, each subobject of obj of scalar type
                                       // holds its original value

36) By using, for example, the library functions (17.4.1.2) memcpy or
memmove.

[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