Appendix C. Implementation of Move Special Member Functions

In Chapter 3, and for most of this book, we have been relying on the compiler-provided default move constructor and move assignment operator. However, for those who would like a more in-depth explanation beyond the default cases, this appendix discusses their implementations in the OptionInfo class, simply replicating their default behavior as examples.

Move operations also are related to memory allocations that are common with a vector container, discussed at a high level in Chapter 4. Reading the entirety of this section is not a prerequisite, but it is provided here in case you would like more information.

Returning to the OptionInfo class, the default settings instructing the compiler to generate default versions of the move operations are now removed. Instead, they are declared similarly to the copy operations:

class OptionInfo
{
public:
    OptionInfo(std::unique_ptr<Payoff> payoff, double time_to_exp);
    double option_payoff(double spot) const;
    double time_to_expiration() const;
    void swap(OptionInfo& rhs) noexcept;

    OptionInfo(const OptionInfo& rhs);
    OptionInfo& operator =(const OptionInfo& rhs);

    OptionInfo(OptionInfo&& rhs) noexcept;
    OptionInfo& operator =(OptionInfo&& rhs) noexcept;

    ~OptionInfo() = default;

private:
    std::unique_ptr<Payoff> payoff_ptr_;
    double time_to_exp_;
};

The first detail you will probably notice is that both special move functions have also been declared noexcept. This will also be explained.

Get Learning Modern C++ for Finance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.