Prechádzať zdrojové kódy

Added a warning about the usage of ctkCmdLineModuleFutureWatcher.

Sascha Zelzer 12 rokov pred
rodič
commit
392647e2bf

+ 2 - 1
Applications/ctkCommandLineModuleExplorer/ctkCmdLineModuleExplorerProgressWidget.h

@@ -23,6 +23,7 @@
 #define CTKCMDLINEMODULEEXPLORERPROGRESSWIDGET_H
 
 #include "ctkCmdLineModuleResult.h"
+#include "ctkCmdLineModuleFutureWatcher.h"
 
 #include <QWidget>
 #include <QFutureWatcher>
@@ -71,7 +72,7 @@ private Q_SLOTS:
 private:
   Ui::ctkCmdLineModuleExplorerProgressWidget *ui;
 
-  QFutureWatcher<ctkCmdLineModuleResult> FutureWatcher;
+  ctkCmdLineModuleFutureWatcher FutureWatcher;
   QTimer PollPauseTimer;
 
 };

+ 10 - 0
Libs/CommandLineModules/Core/ctkCmdLineModuleFutureWatcher.h

@@ -44,6 +44,16 @@ struct ctkCmdLineModuleFutureWatcherPrivate;
  * new error data (usually text written to the standard error channel).
  *
  * Use readPendingOutputData() or readPendingErrorData() to get the newly added data.
+ *
+ * \warning While you could use a QFutureWatcher<ctkCmdLineModuleResult> instance directly (and
+ *          provide a ctkCmdLineModuleFuture via QFutureWatcher<ctkCmdLineModuleResult>::setFuture(future)
+ *          by virtue of "slicing") this is discouraged. The reason is that a member variable of type
+ *          QFutureWatcher<ctkCmdLineModuleResult> will have a different size, depending on the inclusion
+ *          of the ctkCmdLineModuleFutureInterface.h header (this header provides a specialization of the
+ *          QFutureInterface template which adds a data member). This can lead to subtle heap corruptions.
+ *          Since the code compiles with or without the ctkCmdLindeModuleFutureInterface.h inclusion, you
+ *          should always use ctkCmdLineModuleFutureWatcher when working with ctkCmdLineModuleFuture objects
+ *          to avoid runtime heap corruptions.
  */
 class CTK_CMDLINEMODULECORE_EXPORT ctkCmdLineModuleFutureWatcher : public QFutureWatcher<ctkCmdLineModuleResult>
 {