Developer knowledge network · moderated exchange

Супольнасць UnreliableCode

Супольнасць распрацоўшчыкаў даследаванняў, зваротнага праектавання і кадавання

Knowledge indexжыць
4Categories
919Threads
2.8KПаведамленні
Discussion

Why passing parameters by value and std::move is preferred in constructors (Sink Arguments) [StackOverflow Architecture Guide]

raii_clean_coder
Modern C++ Advocate
MEMBER
прадстаўнік: 190
Дата далучэння: Aug 2020
Паведамленні: 20
Дзякуй: 22
1 месяцаў таму · Jun 29, 2026 11:00 AM
#1

Modern pattern for storing constructor arguments:

CPP
class UserProfile {
    std::string m_name;
    std::vector<int> m_scores;
public:
    // Pass by value, then move into member
    UserProfile(std::string name, std::vector<int> scores)
        : m_name(std::move(name)), m_scores(std::move(scores)) {}
};

If caller passes an rvalue (UserProfile("Alice", {10, 20})), the arguments are constructed once and moved twice with zero deep copies! Avoids having to write separate lvalue and rvalue constructor overloads.

modern_cpp_artisan
C++ Template Wizard
MEMBER
прадстаўнік: 124
Дата далучэння: Jun 2019
Паведамленні: 29
Дзякуй: 72
1 месяцаў таму · Jun 29, 2026 3:57 PM
#2

Pass-by-value-then-move (the sink parameter idiom) provides the cleanest balance between brevity and move efficiency for constructor parameters.

cpp_concurrency_guru
C++ Standards Expert
MEMBER
прадстаўнік: 47
Дата далучэння: Feb 2018
Паведамленні: 17
Дзякуй: 75
1 месяцаў таму · Jun 30, 2026 4:18 AM
#3

Saves having to maintain $2^N$ combinatorial overloads for constructors with multiple parameters.