Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8315423
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 8, 20262026-06-08T21:07:39+00:00 2026-06-08T21:07:39+00:00

Say I have the following: struct A { int x; }; //… A* aOriginal

  • 0

Say I have the following:

struct A
{
   int x;
};

//...
A* aOriginal = new A();  //value construct aOriginal
assert( aOriginal->x == 0 );

A* aSecond = new (aOriginal) A;
assert( aSecond->x == 0 );

Is the second assert guaranteed to hold, even though aSecond is not value-initialized? Logically, it should, because the memory isn’t overwritten, but is it specified by the standard?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-08T21:07:40+00:00Added an answer on June 8, 2026 at 9:07 pm

    No.

    When you construct the second object on the same storage location, the lifetime of the previous one ends (§3.8/1):

    […] The lifetime of an object of type T ends when:

    • if T is a class type with a non-trivial destructor (§12.4), the destructor call starts, or
    • the storage which the object occupies is reused or released.

    When the second object is created, since A has the implicit default constructor, the x member is default-initialized, and thus no initialization is performed (§8.5/6):

    To default-initialize an object of type T means:

    • […]

    • otherwise, no initialization is performed.

    And this means the object has indeterminate value (§5.3.4/15):

    A new-expression that creates an object of type T initializes that object as follows:

    • If the new-initializer is omitted, the object is default-initialized (§8.5); if no initialization is performed,
      the object has indeterminate value.

    And in case you think that the value is not indeterminate because you previously initialized another object on that storage location: the standard discards that possibility as well by saying the properties of the previous object no longer apply once its lifetime ends (§3.8/3):

    The properties ascribed to objects throughout this International Standard apply for a given object only during its lifetime.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Say I have the following class: template<class T> struct A { static int value;
Say I have the following code: struct date { int day; int month; int
Say I have the following data IEnumerable<IEnumerable<int>> items = new IEnumerable<int>[] { new int[]
Let's say I have the following object: struct Foo { int size() { return
Say we have the following structure: struct Tree { string id; int numof_children; Tree
Say I have a struct like the following ... typedef struct { int WheelCount;
Let's say we have following code: struct A{ virtual ~A(){} void f(){ p =
Let's say I have the following code: struct mytype { ~mytype() { /* do
Say, I have the following struct in C# : public struct MyStructCSharp { private
Let's say we have following this: <p class=first>This is paragraph 1.</p> <p class=second>This is

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.