cpp

Write safe, performant modern C++ code.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "cpp" with this command: npx skills add htlin222/dotfiles/htlin222-dotfiles-cpp

C++ Development

Write safe, performant modern C++ code.

When to Use

  • Writing C++ code

  • Memory management issues

  • Template metaprogramming

  • Performance optimization

  • Legacy C++ modernization

Modern C++ Patterns

Smart Pointers

// Unique ownership auto ptr = std::make_unique<Resource>(); process(std::move(ptr));

// Shared ownership auto shared = std::make_shared<Resource>(); auto copy = shared; // Reference count: 2

// Weak reference (no ownership) std::weak_ptr<Resource> weak = shared; if (auto locked = weak.lock()) { // Use locked }

RAII

class FileHandle { FILE* handle_; public: explicit FileHandle(const char* path) : handle_(fopen(path, "r")) { if (!handle_) throw std::runtime_error("Failed to open"); } ~FileHandle() { if (handle_) fclose(handle_); }

// Rule of 5
FileHandle(const FileHandle&#x26;) = delete;
FileHandle&#x26; operator=(const FileHandle&#x26;) = delete;
FileHandle(FileHandle&#x26;&#x26; other) noexcept
    : handle_(std::exchange(other.handle_, nullptr)) {}
FileHandle&#x26; operator=(FileHandle&#x26;&#x26; other) noexcept {
    std::swap(handle_, other.handle_);
    return *this;
}

};

Containers and Algorithms

std::vector<int> nums = {3, 1, 4, 1, 5};

// Prefer algorithms over raw loops std::sort(nums.begin(), nums.end());

auto it = std::find_if(nums.begin(), nums.end(), [](int n) { return n > 3; });

// Range-based for for (const auto& num : nums) { std::cout << num << '\n'; }

// Structured bindings (C++17) std::map<std::string, int> scores; for (const auto& [name, score] : scores) { std::cout << name << ": " << score << '\n'; }

Templates

// Concepts (C++20) template<typename T> concept Numeric = std::integral<T> || std::floating_point<T>;

template<Numeric T> T sum(const std::vector<T>& values) { return std::accumulate(values.begin(), values.end(), T{}); }

// SFINAE (pre-C++20) template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>> T multiply(T a, T b) { return a * b; }

Best Practices

  • Prefer const and constexpr

  • Use smart pointers over raw pointers

  • Follow Rule of 0/5

  • Prefer STL algorithms

  • Use std::string_view for read-only strings

  • Enable warnings: -Wall -Wextra -Wpedantic

Common Issues

Issue Symptom Fix

Memory leak Growing memory Use smart pointers

Dangling ptr Crash/UB Check lifetime

Buffer overflow Crash/security Use std::vector/span

Data race Inconsistent state mutex/atomic

Examples

Input: "Fix memory leak" Action: Replace raw pointers with smart pointers, ensure RAII

Input: "Modernize this C++ code" Action: Apply C++17/20 features, use STL, improve safety

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

devops

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

code-review

No summary provided by upstream source.

Repository SourceNeeds Review