 <p>None of those are even remotely good ideas, although the first one is passable with some modifications. <code>reinterpret_cast</code> doesn't work the way you think it does, and I'm not sure what exactly you're trying to achieve with placement new. Store a smart pointer of some sort in the first one to avoid the obvious issues with lifetime, and the first option isn't bad. </p> <p>There is a fourth option: just store the data in a struct, and provide whatever encapsulated access you desire.</p> <pre><code>struct data { data(int i_) : i(i_) { } int i; }; struct s { s(int i_) : i(i_) { } data i; }; </code></pre> <hr> <p>Rereading your question, it appears as though maybe your intent is for this struct to be an internal detail of some larger object. In that case, the lifetime issues with the first solution are likely taken care of, so storing a raw pointer is less of a bad idea. Absent additional details, though, I still recommend the fourth option.</p>