【发布时间】:2014-06-03 22:08:41
【问题描述】:
复制为shared_ptr to an array : should it be used?
根据this post,用 smart_ptr 包装数组的好方法是定义一个 deleter 函数并将 deleter 函数与原始数组一起单独传递给 smart_ptr。
我将重构我的代码,例如使用 smart_ptr 包装原始数组。 这是一个例子:
原始代码:
class MyList{
public:
MyList(int size = 0);
void Resize(int size);
~MyList();
private:
int* myArray;
int* head_;
size_t size_;
}
MyList::MyList(int size){
myArray = new int[size]; //allocated memory when object is being created
head_ = list_;
size_ = size;
}
void MyList::Resize(int size) {
if (!list_) {
delete myArray;
size_ = 0;
}
myArray = new int[size];
head_ = list_;
size_ = size;
}
MyList::~MyList(){
delete myArray;
head = null_ptr;
}
我的问题是:
如何使用smart_ptr 正确包装原始数组?
【问题讨论】:
-
试试
myArray = new myArraySize() -
我没听懂,你能告诉我更多细节吗?谢谢
-
您必须使用
new运算符构建一个新实例,这意味着调用构造函数,即myArraySize(),而不是myArraySize。当然我假设myArraySize是一个定义明确的class类型。
标签: c++ pointers memory-management smart-pointers dynamic-memory-allocation