The Cost of Copy¶

performance-move

Cost of Copy
  • To find the places where copy-ctor and copy-assignment are called, mark them deprecated
    • Along with setting breakpoints
class example {
public:
    example() = default;
    [[deprecated]] example(const example&) = default;
    example(example&&) noexcept = default;
    [[deprecated]] example& operator=(const example&) = default;
    example& operator=(example&&) noexcept = default;
};
example x;
example y = x;

Copy Location and Pass By Value¶

  • When passing an lvalue as a by value argument, the copy occurs at the call site
  • For non-inline functions this may cause binary bloat
    • Can use pass-by rvalue and lvalue reference for such cases
class sink {
    example _m;
public:
    void set(example e) { _m = std::move(e); }
};
sink s;
s.set(x);
class sink2 {
    example _m;
public:
    void set(const example& e) { _m = e; }
    void set(example&& e) { _m = std::move(e); }
};
sink2 s;
s.set(x);