5

ho incontrato quello che sembra a me essere una tabella virtuale danneggiato che deriva dalla costruzione e l'esecuzione del codice di esempio postato qui sotto in Visual Studio 2015.tabella virtuale danneggiata visual studio bug

quando l'eseguo, un'eccezione è generata quando è stato assegnato m_string.

Ho verificato che il codice viene generato ed eseguito come previsto utilizzando sia i compilatori gcc che i compilatori Clang.

Ho cercato di rendere l'esempio il più minimale possibile, in quanto è stato sintetizzato da un progetto molto ampio.

Inoltre, mi rendo conto che restituisco null da alcune delle funzioni - il valore di ritorno effettivo non è rilevante per il problema, ma il tipo restituito potrebbe essere. È un possibile errore di Visual Studio?

+0

hai accesso a una versione precedente di MSVC? – Igor

+2

Utilizzare connect.microsoft.com per segnalare questo problema o chiamare il supporto Microsoft quando non si è in grado di attendere. –

+0

Almeno posso migliorare le tue osservazioni come visto [qui] (http://coliru.stacked-crooked.com/a/e6b49c3b451dc769) e [qui] (http://coliru.stacked-crooked.com/a/0c5d90a1ebbd3a68). –

risposta

2

Una soluzione è rendere l'ereditarietà dalla classe A virtuale.

struct C : virtual public A, public B { virtual ~C(void) override { } }; 

o

struct F : virtual public A, public E { ... } 

Il problema è più probabilmente correlate alla desctructors virtuali nelle classi di base. Forse altri possono fornire ulteriori spiegazioni sul perché questo funziona.

Come indicato da @JamesAdkison, lo swapping delle classi ereditate (modificando struct C : public A, public B {...} in struct C : public B, public A {...}) risolve anche il problema; così cambia struct F : public A, public E { ... } a struct F : public E, public A { ... }. Quindi, sembra un errore in MSVC, come menzionato da @Josh P.

+0

Credo che tutto il feedback (in particolare sullo swapping dell'ordine in cui le classi sono ereditate) lo confermi come un bug nel compilatore MSVC; Contatterò Microsoft di conseguenza. Grazie! –

+1

Josh, hai contattato MS? C'è un problema di connessione per questo? –

+0

Sì, ho contattato Microsoft e posso confermare che il loro ultimo aggiornamento (Aggiornamento 3) a Visual Studio 2015 risolve il problema. –