Unten ist die minimalistische Problem des Codes:Compilerfehler, wenn destructor in der Klasse Körper mit unique_ptr als Mitglied derselben Klasse deklariert
struct B {
B() = default;
//~B() {}; // error: use of deleted function ‘B& B::operator=(const B&)’
std::unique_ptr<int> m_pB = nullptr;
};
int main()
{
std::vector<B> vB;
vB.erase(vB.begin());
}
Above Code kompiliert gut, es sei denn, die destructor unkommentiert ist. Für meine Anforderung muss ich einen Körper von ~B()
explizit definiert haben.
Wie kann ich den Körper des Destruktor mit der unique_ptr
Koexistenz in der gleichen Klasse definieren?
Hinweis: Versuchte definieren = default
Versionen Kopie & bewegen Konstruktor ohne Erfolg. In meinem echten Code ist unique_ptr<int>
unique_ptr<forward_declared_class>
. Konnte dieses Problem in SO nicht finden, obwohl ich sicher bin, dass es vorhanden sein muss. Fühlen Sie sich frei, als Dupe zu markieren.
Forward deklariert ist relevant für das Problem - kann 'delete' nicht zuverlässig aufrufen (d. H. Kann' std :: default_deleter' nicht instanziieren) ohne einen sichtbaren Destruktor. – milleniumbug
Siehe diese Frage http://stackoverflow.com/questions/6012157/is-stdunique-ptrt-required-to-know-the-full-definition-of-t – milleniumbug
Es gibt keinen Grund, nullptr zu m_pB zuweisen. –