26. Reinitialize Object In-Place

#include <iostream>
#include <cstdint>
#include <new>

using namespace std;

// Mode struct representing a firmware mode/level
struct Mode {
    int level;
};

int main() {
    int firstLevel, secondLevel;
    cin >> firstLevel >> secondLevel;

    // Properly aligned static buffer for one Mode object
    alignas(Mode) uint8_t buffer[sizeof(Mode)];

    // Construct first Mode object in-place
    Mode* modePtr = new (buffer) Mode{firstLevel};

    // Destroy first object
    modePtr->~Mode();

    // Reconstruct Mode object with new level in same buffer
    modePtr = new (buffer) Mode{secondLevel};

    // Print the updated mode level
    cout << modePtr->level;

    // Final destructor call
    modePtr->~Mode();

    return 0;
}

Explanation & Logic Summary:

  • The same memory buffer is reused for both object constructions.
  • alignas(Mode) ensures correct alignment for placement new.
  • Placement new constructs objects without allocating memory.
  • Manual destructor calls are required before reuse.
  • This models deterministic, heap-free reinitialization common in firmware.

Firmware Relevance & Real-World Context:

  • Common in embedded systems with fixed memory layouts
  • Used for:
    • In-place reset of control structures
    • State machine reinitialization
    • Driver reconfiguration
    • Avoiding heap fragmentation
  • Ensures deterministic behavior and memory safety in firmware environments

 

 

 

 

 

 

 

Loading...

Input

3 9

Expected Output

9