2011-01-11 13 views
0

Ich beziehe mich darauf, wenn die Klasse von einer DLL mit einem eigenen Haufen kommt, und es hat einen privaten Vektor, ist es sicher, öffentliche Funktionen zu haben, die Iteratoren zu diesem Vektor zurückgeben?Ist es DLL-sicher, Iteratoren zurückzugeben?

Dank

+0

Diese Antwort nicht akzeptieren. Ich bin ziemlich sicher, dass es völlig falsch ist, in der Antwort und in den Kommentaren, aber ich möchte auf seine Antworten warten, bevor ich meine eigenen mache. – GManNickG

Antwort

0

Es ist nicht. Die Tatsache, dass es einen eigenen Haufen hat, verhindert, dass es korrekt funktioniert.

+0

Wäre es sicher, schreibgeschützte Iteratoren zurückzugeben? –

+0

Ich sehe wirklich nicht, wie es nicht sicher ist, virtuelles Speichermodell besagt, dass wir alle auf das selbe Zeug zeigen, es wäre nur unsicher, wenn du es getan hättest: delete (* it); Könntest du erklären, warum es nicht sicher ist? – jmasterx

+0

Da die CRT eine Menge Heap-Überprüfung durchführt, um sicherzustellen, dass die genaue Situation, die Sie versuchen, nicht getan werden kann (nicht zu erwähnen, dass es nicht sicher durchgeführt werden kann, da Sie absolut sicherstellen müssen Jede App, die auf Ihre DLL zugreift, wird mit der exakt gleichen Version im exakt gleichen Modus kompiliert, wobei genau derselbe Compiler die CRT definiert. –

2

Ja. Ein Nachteil: Verwenden Sie bei der Verwendung von DLLs die C++ - Laufzeit-DLL, nicht die statische Verknüpfung.

Sie verwenden statische Verknüpfung in 2 Fällen: beim Entwickeln einer Standalone-EXE (wobei die Laufzeit-DLL die erste und einzige DLL wäre) und beim Entwickeln einer wiederverwendbaren DLL ohne C++ - Schnittstelle (dh entweder eine C-Schnittstelle oder eine COM-Schnittstelle)). Keiner dieser Fälle gilt hier. Sie müssen über eine C++ - Schnittstelle verfügen, um Iteratoren zurückzugeben.

Mit dynamischer Verknüpfung der C++ - Laufzeit gibt es nur eine Laufzeit.

Verwandte Themen