In einer Antwort auf Is it safe to store objects of a class which has an std::auto_ptr as its member variable in std::vector? habe ich festgestellt, dass eine Klasse, die ein auto_ptr enthielt, in einem Vektor gespeichert werden konnte, sofern die Klasse einen benutzerdefinierten Kopierkonstruktor hatte.Klasse mit auto_ptr in Vektor
Es gab mehrere Kommentare, die darauf hinwiesen, dass dies nicht der Fall war, daher ist diese Frage ein Versuch, das Problem zu klären. Betrachten Sie den folgenden Code ein:
#include <memory>
#include <vector>
using namespace std;
struct Z {};
struct A {
A(Z z)
: p(new Z(z)) {}
A(const A & a)
: p(a.p.get() ? new Z(*a.p.get()) : 0) {}
// no assigment op or dtor defined by intent
auto_ptr <Z> p;
};
int main() {
vector <A> av;
Z z;
A a(z);
av.push_back(a);
av.push_back(A(z));
av.clear();
}
Bitte prüfen die oben & in Ihrer Antwort an, wo nicht definieren Verhalten im Sinne des C++ Standard für diese besondere Klasse in dieser besonderen Art und Weise verwendet, auftreten könnten. Ich bin nicht interessiert, ob die Klasse nützlich, gut erzogen, sortierbar ist oder wie sie unter Ausnahmen funktioniert.
Bitte beachten Sie auch, dass dies keine Frage über die Gültigkeit der Erstellung eines Vektors von auto_ptrs ist - ich bin mir der Probleme darüber bewusst.
Dank allen für Ihre Eingaben auf das, was in Nachhinein ist wahrscheinlich eine ziemlich dumme Frage. Ich glaube, ich konzentrierte mich zu viel auf die Kopie ctor & vergaß über Zuordnung. Der glückliche Gewinner meiner Akzeptanzstellen (und Punkte bedeuten Preise!) Ist litb für eine typisch erschöpfende Erklärung (sorry Earwicker)
Ist dies ein 1. April Frage? AFAIK, du bist fähiger als die meisten von uns, um UB herauszufinden :-) – dirkgently
Ich wusste, dass jemand das fragen würde :-) Aber nein, ich meine es ernst. –