Ich verstehe nicht rohe Zeiger ganz gut und leider bin ich nicht erlaubt, <vector>
s zu verwenden, so kann ich nicht herausfinden, wie man einen parametrisierten Konstruktor einer Klasse, die ein Array von einer anderen Klasse Objekte als hat seine Eigenschaft.Wie übergebe ich ein dynamisches Array von Objekten an einen parametrisierten Konstruktor einer anderen Klasse?
class A{
...
};
class B{
int size;
A *arr;
...
B(int, const A *); // am I declaring this right?
}
...
B::B(int size_, const A *arr_) { // this is the constructor I'm trying to write
size = size_;
if (arr != nullptr) delete[] arr;
arr = new A[size];
memcpy(arr, arr_, sizeof(A) * size);
}
Wie kann ich dieses Argument übergeben, ohne den Speicher durcheinander zu bringen? Der obige Code funktioniert nicht richtig, daher möchte ich einige Tipps hören. Ich habe es nicht geschafft, die Lösung zu googlen, obwohl es so aussieht, als wäre meine Frage bereits beantwortet, entschuldige ich mich in diesem Fall.
Ich darf keine sicheren std::
Sachen verwenden. Ich muss herausfinden, wie man es mit der manuellen Speicherzuweisung von C arbeiten lässt. Hoppla, ich meine von C++, danke, dass Sie dies unterstrichen haben.
hier ist also der Konstruktor, die für mich bisher funktioniert:
B::B(int size_, const A *arr_) {
size = size_;
arr = new A[size_];
for (int i = 0; i < size; i++) arr[i] = arr_[i];
}
Vielen Dank für alle Zeit!
Sie müssen einen vollständigen Testfall bereitstellen. Siehe hier: http://StackOverflow.com/Help/Mcve Es gibt nicht genug Informationen in dem Code, den Sie zur Verfügung gestellt haben, um Ihnen zu sagen, was falsch ist. – xaxxon
können Sie 'std: array' verwenden? –
'if (arr!= nullptr) delete [] arr; 'ist unwahrscheinlich, was Sie in Ihrem Konstruktor wollen. Nun, eigentlich ist es einfach falsch. Und die Verwendung von 'memcpy' ist einfach falsch, es sei denn, Sie wissen, dass' A' trivial kopierbar ist. – jxh