Derleme yapamayacağım aşağıdaki kod var ve bu Cuma günü ve biraz frazzledim. Bir sorunC++ std :: unique_ptr std içinde saklanır :: harita silinen fonksiyonun kullanımı oluşturdu
int main()
{
std::pair< std::string, std::unique_ptr<A> > p { "B", make_unique<A>() };
_map.insert(std::make_pair("C", make_unique<A>()));
}
olmayan
#include <string>
#include <memory>
#include <utility>
#include <map>
template< typename T, typename ...Args >
std::unique_ptr<T> make_unique(Args && ...args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
struct A
{
};
std::map< std::string, std::unique_ptr<A> > _map = { { "A", make_unique<A>() } }; // <-- ERROR!!
aşağıdaki derlemesinin alıyorum hata (yaklaşık olarak, çıkarılabilir şekilde g ++ kabartmak)
use of deleted function 'constexpr std::pair<...>(const st::pair<...> &)
'constexp std::pair<...>::pair(const std::pair<...> &) is implicitly deleted because the default definition would be illegal.
Argghh olan !! Sadece bunu C++ 11 standardında okuyun. 8.5.4 içinde belirtilen bir agregat, bir başlatıcı listesi tarafından başlatılır
, başlatıcı listesinin elemanları simge veya üye artan sırada, agrega üyelerine başlatıcıları olarak alınır. Her üyesidir kopyalamaya karşı başlatılmış başlatıcı, Fıkra
bummer tekabül den !!!
Başlatıcı listeleri ile sadece imkansız olup olmadığını bilen var mı?
Başlatıcı listeleriyle çalışmak için buna gerçekten ihtiyacım var. Derleme kodu sadece örneğiydi. – ScaryAardvark
Hmm. Sadece merak ediyorum. Initialiser_lists argümanlarının kopyalanabilir olmasını ister mi? Bu durumda, bir unique_ptr kopyalayamayacağınız gibi bir hata anlamlı olacaktır – ScaryAardvark
[This] (http://stackoverflow.com/questions/8193102/initializer-list-and-move-semantics) ilgili görünüyor .... –