Özellikle ++ shared_ptr
, C++ 11 özellikleri hakkında bilgi alıyorum ve this
için başvuruda bulunarak ve diğer sınıflar için başvuru olarak kullanmakta sorun yaşıyorum."Bu" bir paylaşımlı_ptr olarak mı atıfta bulunuluyor?
Bunu yapmamın nedeni, simulasyondaki diğer örneklere (örn. Apple
) geçirilen bir Simulation
örneğidir, böylece simülasyonu kendileri değiştirebilirler, hatta kendilerini simülasyondan kaldırabilirler. Benim daha karmaşık kodu
ben from here anladığım kadarıyla aynı ham nesne üzerinde iki kez shared_ptr
oluşturmamalıdır bir double free
hatası (program yoksa) olsun. Simülasyon sınıfının this
zaten bir shared_ptr
olduğunu bilmediğinde this
nesnesine shared_ptr
nesnesine nasıl geçebilirim?
Benim düşünce başlatma argüman shared_ptr
geçmektir ama bu
// The argument is a std::shared_ptr<Simulation>
simulation->initSomethingElse(simulation);
Belki alışılmadık desende bu uygulamaya çalışıyorum, ya da belki benim anlayış çok doğru değildir, ör .: gereksiz görünüyor? Belki bunun yerine daha güzel bir yolu var mı?
#include <memory>
class Simulation;
class Apple {
public:
void init(std::shared_ptr<Simulation> simulation) {
this->simulation = simulation;
};
private:
std::shared_ptr<Simulation> simulation;
};
class Simulation {
public:
void initSomethingElse() {
auto apple = std::shared_ptr<Apple>(new Apple());
// incorrect second reference to the raw pointer
apple->init(std::shared_ptr<Simulation>(this));
};
};
int main() {
auto simulation = std::shared_ptr<Simulation>(new Simulation());
simulation->initSomethingElse();
return 0;
}
'shared_ptr 'örneklerini nerede yok ediyorsunuz? Sadece son cümle için –
Dai