Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c++]MoveSemantic

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]MoveSemantic

    ciao .
    Espongo rapidamente il problema:
    In un progetto opengl Ho una struttura triangle che contiene tre punti e vari attributi.
    Un oggetto trimesh contiene una lista di questi triangle.
    questi triangle sono dell'ordine dei 10000 - 30000 e vengono estratti da vari formati di interscambio in un modulo che ho creato per l'importazione.
    La classe che inserisce i dati e crea i buffer opengl contiene la lista all'inizio ma questa lista deve essere rapidamente spostata nella trimesh perchè è li che vengono fatti i calcoli come il calcolo della normale, l'estrazioni dei contorni ecc.... quindi è li che devono risiedere i triangoli

    chiedo perchè in questo caso mi sembra sia buona cosa la move semantic.

    Il problema che non riesco a capire è che ho letto che dopo la move semantic i dati da cui si sono spostati vengono messi a null.
    Esiste un costruttore di copia che crea varie copie di qusti blocchi(liste)di triangoli ?
    senza impostarli a null, perchè dopo che li imposto a null i dati sono persi, e qui forse mi sbaglio perchè non ho capito.

    esiste in pratica un costruttore di copia per la move semantic che mi replica n copie uguali di una lista di questi triangle?

    grazie.

  2. #2
    Se vuoi creare copie, usa il costruttore di copie. La move semantic serve quando vuoi spostare un oggetto in un altro, e l'oggetto originale non serve più (tipicamente si usa con oggetti temporary e roba del genere).

    Se invece quello che vuoi è creare delle copie "copy on write" (=finché non vengono modificati, internamente puntano tutti ai dati originali, e la copia viene creata solo al momento della modificat), come molti oggetti delle Qt, il C++ non fornisce nulla di già fatto, devi implementarteli da te.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.