make_shared (<memory>)
Oluşturur ve döndürür bir shared_ptr işaret ayrılmış nesnelere sıfır veya daha çok bağımsız değişkenlerde varsayılan ayırıcıyı kullanarak oluşturulur.
template<class Type, class... Types>
shared_ptr<Type> make_shared(
Types&&... _Args
);
Parametreler
Parametre |
Tanımlama |
---|---|
_Args |
Oluşturucu bağımsız değişkenleri. İşlev çağırmak için oluşturucu aşırı yüklenerek sağlanan bağımsız değişkenler üzerinde temel içerilen. |
Özellik Değeri ve Dönüş Değeri
Döndürür bir shared_ptr ayrılmış nesneye işaret eder.
Notlar
İşlev oluşturur shared_ptr<Type>, bir işaretçi Type(_Args...) ayrılmış ve varsayılan ayırıcı tarafından oluşturulmuş olarak allocator(). Aşağıdaki örnek belirli Oluşturucu aşırı çağırarak bir tür paylaşılan işaretçiler oluşturulması gösterilmiştir.
Örnek
#include <iostream>
#include <string>
#include <memory>
using namespace std;
class Zebra
{
private:
int nStripes;
string name;
public:
Zebra() : nStripes(-1), name("Default")
{
cout << "I'm a default Zebra." << endl;
}
Zebra(int i, string s) : nStripes(i), name(s)
{
std::cout << "My name is " << name
<< " and I have " << nStripes
<< " stripes." << endl;
}
virtual ~Zebra()
{
cout << "Goodbye from " << name << endl;
}
};
void MakeZebras()
{
auto pzeb = make_shared<Zebra>();
auto pGeorge = make_shared<Zebra>(5, "George");
}
class SongBase
{
protected:
std::wstring id;
public:
SongBase() : id(L"Default"){}
SongBase(std::wstring init) : id(init) {}
virtual ~SongBase(){}
};
class Song : public SongBase
{
public:
std::wstring title_;
std::wstring artist_;
std::wstring duration_;
std::wstring format_;
//Song(std::wstring title, std::wstring artist) : title_(title), artist_(artist){}
Song(std::wstring title, std::wstring artist) : title_(title), artist_(artist){}
//Song(Song&& other)
//{
// title_ = other.title_;
// artist_ = other.artist_;
// duration_ = other.duration_;
// format_ = other.format_;
// /*other.title_ = nullptr;
// other.artist_ = nullptr;
// other.duration_ = nullptr;
// other.format_ = nullptr;*/
//}
~Song()
{
std::wcout << L"Deleting " << title_ << L":" << artist_ << std::endl;
}
Song& operator=(Song&& other)
{
if(this != &other)
{
this->artist_ = other.artist_;
this->title_ = other.title_;
this->duration_ = other.duration_;
this->format_ = other.format_;
other.artist_ = nullptr;
other.title_ = nullptr;
other.duration_ = nullptr;
other.format_ = nullptr;
}
return *this;
}
bool operator ==(const Song& other)
{
return this->artist_.compare(other.artist_) == 0 &&
this->title_.compare(other.title_) == 0;
}
};
shared_ptr<Song> MakeSongPtr(wstring artist, wstring title)
{
Song* s = new Song(artist, title);
shared_ptr<Song> p(s);
//return make_shared<Song>(artist,title);
return p;
}
Gereksinimler
Başlık: <memory>
Ad alanı: std