Çok fazla kod atlayacağım çünkü bunlar oldukça büyük nesnelerdir ve benim sorum gerçekten sadece std :: make_shared'in çalışmasını ilgilendirir. SY3 adında D3D11Shader adlı bir nesnem var. Bu bir dize endeksi alıp SYNC türetilen bir shader :: D3D11Shader örneğine bir işaretçi döndürür adında bir statik fonksiyonunuhatası kullanarak std :: make_shared özet sınıf örneği
SYNC::D3D11Shader * SYNC::D3D11Shader::CreateInstance(const std::string & s)
sahiptir. Bir noktada, tüm bu gölgelendiricileri tutan vektör içinde bunların ayrılmasını otomatikleştirmek için akıllı işaretçiler kullanmaya başladım. i bunu git Ancak,
std::shared_ptr<SYNC::D3D11Shader> shaderPtr;
// ... verification of index and other initialization happens here
// so i am unable to initialize it in it's constructor
shaderPtr = std::make_shared<SYNC::D3D11Shader>(SYNC::D3D11Shader::CreateShader(shaderName));
derleyici hataları
i soyut sınıftır bu satırda D3D11Shader bir örneğini instanciate çalışıyorum söyleyerek. Tüm make_shared'in std :: shared_ptr örneğine döndüğünü sanmıştım. CreateInstance işlevi hiçbir zaman bu sınıfın bir örneğini oluşturmayı denemez, yalnızca onu oluşturan ve uygulayan nesneler. Bu işlevi ve akıllı işaretçileri kullanmadan önce bu hatayı almıyordum. Burada neler olduğunu bilen var mı? Yeterince
make_shared http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared veya http://msdn.microsoft.com/en-us/library/ee410595.aspx –
belgelerini inceleyin. Peki ateş, "Bir nesneyi oluşturur." sıfırlamadan sonra bir işaretçiye bir shared_ptr ayarlamak için zaten var mı? – FatalCatharsis
Paylaşılan_ptr yapıcısını doğrudan 'shared_ptr ptr (your_pointer_here); 'veya ptr.reset (your_pointer_here); –