我有一個問題,我不能包裹我的頭。 我正在寫我自己的容器,它或多或少像std::vector<T>
,我不知道如何解決分配對象的內存問題。C++ - ::運營商新的[]和分配我的自定義容器
比方說,比如我寫圍繞數組的包裝,並希望這樣的分配數據:
T* cArray = new T[size];
cArray[index] = std::move(obj);
如果OBJ沒有不帶任何參數生病得到一個默認的構造函數錯誤:「類:沒有適當的默認構造函數可用」。
所以我雖然我可以通過調用不使用new運算符與obj的構造解決問題:static_cast<T*>(::operator new(sizeof(T)*this->cap))
而且這隻有當我使用內置的類型,如int, double and floats
作爲成員,我的判斷obj。
如果我做這樣的事情:
struct Test
{
Test(int x){}
std::string s;
double d;
}
MyVector<Test> vec;
vec.push_back(Test(1));
我得到一個運行時錯誤,如果我嘗試將數據分配給我的push_back函數,它包含以下行的位置:
cArray[index] = std::move(obj);
在文件:106行上的xmemory0:
Expression: "(_Ptr_user & (_BIG_ALLOCATION_ALIGNMENT -1)) == 0
同樣,這只是一個問題,當我不使用bu ilt-in類型。如果我刪除std::string
作爲成員,則所有操作都按預期工作。我不知道問題的原因可能是什麼,也不知道如何在搜索幾小時後解決問題。
你們知道如何解決這個問題嗎?
謝謝你的答案隊友,我解決了所有3個答案的問題,不知道我應該標記哪一個。另外它的一種很好,我的自定義矢量插入方式比std :: vector更快,即使它不應該用於生產代碼。 – Jones