std::vector Reallocation: noexcept Move Constructor

Question 9 / 17 Correct so far: 0 (0 answered)

Snippet A

Throwing Move

struct Widget {
    std::string name;
    std::vector<double> payload;

    Widget() : name(kPayloadSize, 'x'), payload(kPayloadSize, 1.0) {}
    Widget(const Widget&) = default;
    Widget(Widget&& other)
        : name(std::move(other.name)), payload(std::move(other.payload)) {}
};

for (std::size_t i = 0; i < kElementCount; ++i)
    v.push_back(Widget{});
Snippet B

Noexcept Move

struct Widget {
    std::string name;
    std::vector<double> payload;

    Widget() : name(kPayloadSize, 'x'), payload(kPayloadSize, 1.0) {}
    Widget(const Widget&) = default;
    Widget(Widget&& other) noexcept
        : name(std::move(other.name)), payload(std::move(other.payload)) {}
};

for (std::size_t i = 0; i < kElementCount; ++i)
    v.push_back(Widget{});
Shared test data (shared-setup)
constexpr std::size_t kElementCount = 512;
constexpr std::size_t kPayloadSize  = 32;

Which snippet is faster?

Select the correct answer(s)