Skip to content

Instantly share code, notes, and snippets.

@taeguk
Last active July 17, 2017 08:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taeguk/17b3d6e955c687d1316517ca09a6e0d0 to your computer and use it in GitHub Desktop.
Save taeguk/17b3d6e955c687d1316517ca09a6e0d0 to your computer and use it in GitHub Desktop.
My note for Optimized C++.

Chapter 6

Eliminate Copying on Function Return

void scalar_product(
    std::vector<int> const& v,
    int c,
    vector<int>& result) {

    result.clear();
    result.reserve(v.size());
    for (auto val : v)
        result.push_back(val * c);
}

Moving bases and members

class Base {...};
class Derived : Base {
    ...
    std::unique_ptr<Foo> member_;
    Bar* barmember_;
};
Derived::Derived(Derived&& rhs)
  : Base(std::move(rhs)),
    member_(std::move(rhs.member_)),
    barmember_(nullptr) {

    std::swap(this->barmember_, rhs.barmember_);
}

vs

void Derived::operator=(Derived&& rhs) {
    Base::operator=(std::move(rhs));
    delete(this->barmember_);
    this->barmember_ = rhs.barmember_;
    rhs.barmember_ = nullptr;
}

The latter is better if a member contains a million-character string or a million-entry table.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment