2013-05-01 55 views
2

假設我有以下類,基本上是一個普通的數組包裝對象的數組:複製動態分配與拷貝構造函數

template<class T> 
SimpleArray { 
    T * array; 
    SimpleArray(): T(NULL) {} 
    SimpleArray(T * array_) { 
    // what goes here? 
    } 
    // TODO: copy constructor and copy assignment 
    ~SimpleArray() { 
    delete[] array; 
    } 
}; 

我如何從一個數組元素複製到另一個?如果它是一個簡單的類型,我可以使用像memcpy這樣的東西,它會工作得很好。但是如果T是一種需要深度複製的複雜類型呢?例如,如果T有一個成員數組,那麼它將創建幾個指向相同資源的對象,這是一場災難。

基本上,我需要一些方法來創建一個數組的深層副本。有什麼建議麼?

我知道我可以使用標準庫中的某些東西,但是我不這樣做。 SimpleArray旨在通過T*形式輕鬆訪問我的對象的內部存儲。就我而言,沒有STL容器支持這種功能。

+0

那麼,首先你需要知道'array_'的大小,然後才能做任何事情...... – Cornstalks 2013-05-01 14:32:24

+1

http://stackoverflow.com/questions/10482998/create-a-deep-copy-of-an -array-c – nikhil 2013-05-01 14:32:27

+0

@nikhil哦,看起來確實如此。謝謝!我想,我的搜索並不好。 – Saage 2013-05-01 14:34:22

回答

1

推出自己的動態數組是不可取的。如果您只需要通過T *訪問底層數據,則可以使用vec.data()(僅限於C++ 11)或& vec.front()。