Ce face std::make_shared
std::make_shared<T>(argumente) construiește obiectul și returnează un std::shared_ptr<T> cu contorul la 1. Argumentele merg direct la constructorul lui T.
Față de std::shared_ptr<T>(new T(...)), face o singură alocare (obiectul și contorul stau împreună), deci este mai rapid, și nu scrii new.
Parametri
| Parametru | Descriere |
|---|---|
argumente |
Valorile trimise constructorului lui T. |
Ce returnează
Un std::shared_ptr<T> către obiectul nou.
Exemple
Exemplul 1: Un coș de cumpărături comun
#include <memory>
#include <print>
#include <string>
#include <vector>
int main() {
auto cos = std::make_shared<std::vector<std::string>>();
auto acelasiCos = cos;
cos->push_back("pâine");
acelasiCos->push_back("lapte");
std::println("{} produse, {} proprietari", cos->size(), cos.use_count());
for (const auto& p : *cos) {
std::println("- {}", p);
}
}
Rezultat
2 produse, 2 proprietari
- pâine
- lapte
Greșeli frecvente
- Folosești
make_sharedpentru un obiect care are un singur proprietar. Alegestd::make_unique; ununique_ptrse poate transforma oricând înshared_ptr(prinstd::move).
Comenzi înrudite
std::shared_ptr: Pointer inteligent cu proprietate comună: obiectul este șters când ultimul shared_ptr dispare.std::make_unique: Creează un obiect pe heap și returnează un std::unique_ptr care îl deține.std::weak_ptr: Referință slabă la un obiect deținut de shared_ptr: nu îl ține în viață; lock() îl folosește în siguranță.