[英]How to use std::shared_ptr as class member?
我需要創建一個這樣的類。 但是,當我運行此代碼時,我得到:
"Error in `./a.out': free(): invalid next size (fast)"
MyClass怎么了? 如何正確使用shared_ptr作為類成員?
#include <memory>
class MyClass
{
public:
MyClass(unsigned size) {
_size = size;
_arr = std::make_shared<int>(size);
for (int i = 0; i < size; i++)
_arr.get()[i] = 0;
}
MyClass(const MyClass& other) {
_arr = other._arr;
_size = other._size;
}
MyClass& operator=(const MyClass& other) {
_arr = other._arr;
_size = other._size;
}
void setArr(std::shared_ptr<int> arr, unsigned size) {
_size = size;
_arr = arr;
}
~MyClass() {
_arr.reset();
}
private:
std::shared_ptr<int> _arr;
unsigned _size;
};
int main() {
MyClass m(4);
return 0;
}
謝謝,我誤解了make_shared的功能。 如果我想使用int *(不是std :: vector或std :: array),我應該寫這個嗎? (並且不要修復其他方法)
MyClass(unsigned size) {
_size = size;
_arr = std::shared_ptr<int>(new int[size]);
for (int i = 0; i < size; i++)
_arr.get()[i] = 0;
}
請看看std :: make_shared如何工作。
基本上, std :: make_shared
構造一個T類型的對象,並將其包裝在std :: shared_ptr中
在您的情況下T為int ,因此std :: make_shared創建了一個int類型的對象,並將其包裝在std :: shared_ptr中 。 結果,內存是為單個int分配的,而不是為int數組分配的,因此程序會導致Undefined Behavior 。
我想您可以使用std :: default_delete來避免出現問題:
_arr = std::shared_ptr<int>(new int[size], std::default_delete<int[]>());
另請注意:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.