Giriş
Metodun imzası şöyle.
p için no-op deleter yazmak yerine aliasing constructor kullanılabilir.
Örnek
Örneğin connection üreten bir factor sınıfımız olsun. Connection'ı kullandığımız müddetçe factory nesnesinin de yok olmaması gerekir. Bu durumda r = factory, p = connection olarak kullanılır. Şöyle yaparız.
Metodun imzası şöyle.
template <class U> shared_ptr (const shared_ptr<U>& r, element_type* p) noexcept;
Açıklaması şöyleEffects: Constructs a shared_ptr instance that stores p and shares ownership with r.p'yi kullanırken r'nin yok olmamasını sağlar. r shared_ptr olmalıdır. get() metodu yine p'yi döndürür.
p için no-op deleter yazmak yerine aliasing constructor kullanılabilir.
Örnek
Örneğin connection üreten bir factor sınıfımız olsun. Connection'ı kullandığımız müddetçe factory nesnesinin de yok olmaması gerekir. Bu durumda r = factory, p = connection olarak kullanılır. Şöyle yaparız.
class Factory : public std::enable_shared_from_this<Factory>
{
public:
std::shared_ptr<Connection> getConnection()
{
return shared_ptr<Value>(shared_from_this(), new Connection()); }
};
Factory sınıfının shared_ptr olarak ilklendirilmesi gerekir.auto factory = std::make_shared<Factory>();
Şöyle çağırırız.shared_ptr<Connection> pCon;
{
// Factory needs to be managed by a shared_ptr.
auto factory = std::make_shared<Factory>();
// factory can go out of scope
// the Factory will be kept alive as long as pCon is alive
pCon = factory->getConnection();
}
Örnek
Elimizde bir shared_ptr dizisi olsun.
Örnek
Elimizde bir shared_ptr dizisi olsun.
std::shared_ptr<int> sp(new T[10], [](T *p) { delete[] p; });
Bu dizi içindeki int'e indeks ile erişirken sp'nin yok olmamasını isteyelim. Şöyle yaparız.shared_ptr<T> ptr_at_offset(int offset) {
return {sp, sp.get() + offset};
}
Elimizdeki shared_ptr buffer nesnesini offset ile kullanmak isteyelim. Böylece ilk nesne kaybolmadan ikinci nesne yine aynı buffer'daki farklı bir yere işaret eder. Şöyle yaparız.
// make sure you use an array deleter
std::shared_ptr<char> osp(new char[1024], std::default_delete<char[]>());
// load the data into your buffer at osp.get()
// Find the offset in the data by parsing
auto const offset = parse_buffer_for_offset(osp.get());
// Now set a new offset into the data
std::shared_ptr<char> nsp(osp, osp.get() + offset);
Hiç yorum yok:
Yorum Gönder