Shared_ptr kullanmak için örnek?
Merhaba bu soruyu How to insert different types of objects in the same vector array ve benim kod hakkında bugün bir soru sordum
gate* G[1000];
G[0] = new ANDgate() ;
G[1] = new ORgate;
//gate is a class inherited by ANDgate and ORgate classes
class gate
{
.....
......
virtual void Run()
{ //A virtual function
}
};
class ANDgate :public gate
{.....
.......
void Run()
{
//AND version of Run
}
};
class ORgate :public gate
{.....
.......
void Run()
{
//OR version of Run
}
};
//Running the simulator using overloading concept
for(...;...;..)
{
G[i]->Run() ; //will run perfectly the right Run for the right Gate type
}
ve birisi bunu ben yazdım vektörler kullanmak istedim :
std::vector<gate*> G;
G.push_back(new ANDgate);
G.push_back(new ORgate);
for(unsigned i=0;i<G.size(); i)
{
G[i]->Run();
}
ama sonra o ve diğerleri daha iyi Boost pointer containers
shared_ptr
kullanırdım önerdi. Son 3 saat bu konu hakkında okuma geçirdim, ama bu belgeleri bana oldukça gelişmiş görünüyor .**Herkes shared_ptr
kullanarak önerdiler bana neden shared_ptr
kullanım küçük bir kod örneği ver. De var ptr_vector
, ptr_list
ptr_deque
gibi diğer türleri**
Edit1: dahil de şu: bir kod örneği okudum
typedef boost::shared_ptr<Foo> FooPtr;
.......
int main()
{
std::vector<FooPtr> foo_vector;
........
FooPtr foo_ptr( new Foo( 2 ) );
foo_vector.push_back( foo_ptr );
...........
}
Ve sözdizimi anlamıyorum!
CEVAP
shared_ptr
vector
kullanarak kaldırır vektör yürümek ve her öğe üzerinde delete
aramayı unuttum çünkü bellek sızıntı olasılığı. Örnek biraz değiştirilmiş bir versiyonu ile yürüyelim satır satır.
typedef boost::shared_ptr<gate> gate_ptr;
Paylaşılan bir imleç türü için bir takma ad oluşturun. Bu std::vector<boost::shared_ptr<gate> >
yazma ve kapanış arasındaki boşluğu unutmadan kaynaklanan C dilinde çirkinlik önlerbüyüktür işaretleri.
std::vector<gate_ptr> vec;
Oluşturur boost::shared_ptr<gate>
nesneleri boş bir vektör.
gate_ptr ptr(new ANDgate);
ANDgate
yeni bir örneğini tahsis ve shared_ptr
bir depola. Ayrı olarak bu iş için nedeni bir operasyon atar oluşabilecek bir sorunu önlemek için. Bu örnekte mümkün değil. Boost shared_ptr
"Best Practices" bir neden açıklaren iyi uygulamageçici yerine kendi başına ayakta durabilen bir nesneye tahsis etmek.
vec.push_back(ptr);
Bu vektör yeni paylaşılan bir işaretçi oluşturur ve içine ptr
kopyalar. Başvuru shared_ptr
bağırsaklar sayma ayrılan nesne ptr
içinde güvenle vektör içine aktarılmasını sağlar.
Değil anlatılanlarla shared_ptr<gate>
yıkıcı ayrılmış bellek silinir sağlar. Bu bellek sızıntısı önlenir. std::vector<T>
yıkıcı T
yıkıcı her öğe vektör kayıtlı olarak adlandırılan sağlar. Ancak, bir işaretçi için yıkıcı (,* örneğin *34)değil silmek ayrılmış olan bellek yok. Bunu engellemek için shared_ptr
ptr_vector
kullanarak çalışıyoruz.
AngularJS: örnek Tek Sayfa Uygulama ki...
Nasıl onSavedİnstanceState örnek lütfe...
Gerçek hayatta DIŞ / ÇAPRAZ kullanmak ...
Bir WordPress kullanmak için bir&; var...
(Ya da ihmal) kullanmak için zaman var...