2016-04-01 4 views
1

ich Visual Studio 2013 und bin mit vielen C4100 Warnungen in Fällen wie dieseböses Studio visuell-Warnung C4100 in Vermeiden

void destroy(pointer p) {//warning C4100 
    p->~T(); 
} 

Ich verstehe nicht, warum bekommen. Meine Frage, wie kann ich diese Warnung ohne #pragma Warnung vermeiden (Plattformunabhängigkeit, Lesbarkeit)?

+0

Ein Schritt zurück ... Warum nennen Sie explizit Objektdestruktor? Es gibt wirklich wenige Situationen, in denen es nützlich ist (und noch weniger Situationen, in denen es gut ist). Sie können _try_ einfach "p;" verwenden, um diesen Parameter zu referenzieren, ohne tatsächlich etwas zu tun. –

+0

Warum nicht einfach 'delete p;'? – Fabian

Antwort

3

Dies ist ein Visual Studio bug/limitation.

C4100 kann auch ausgegeben werden, wenn der Code ein destructor auf einem sonst nicht referenzierte Parameter der primitiven Art nennt. Dies ist eine Einschränkung des Visual C++ - Compilers.

Es sollte einen Fehlerbericht geben, aber ich kann es im Moment nicht finden.

Umgehungen:

  1. Referenz p sonst:

    void destroy(pointer p) { 
        p;   //resolve warning C4100 
        p->~T(); 
    } 
    
  2. Deaktivieren Sie die Warnung:

    • kompilieren, ohne /W4 oder
    • kompilieren mit /wd4100 oder
    • #pragma warning(disable : 4100) hinzufügen
  3. einen anderen Compiler verwenden.

+0

Schade, vielen Dank für das Teilen – user1235183

Verwandte Themen