1

I read in article about Smart Pointers in Boost that :

"scoped_ptr is good for raw pointers, while scoped_array is useful for dynamic arrays."

But I didn't get what they mean by "Raw pointers", so neither the sentence.

Could anyone of you explain to me this? Thanks

4

2 回答 2

2

他们的措辞令人遗憾。人们通常所说的“原始”指针是指原始指针类型,无论它们指向什么。他们的意思是:

scoped_ptr 适用于指向单个对象的指针,而 scoped_array 适用于动态数组

于 2013-08-07T12:26:07.840 回答
1

原始指针是由语言语法引入的指针*

int* ptr;

这是一个普通的 POD(内存中的“原始”数字地址)变量,因此它的破坏很简单。原始指针的重要和烦人之处在于:

int* ptr = new int(42);

因为销毁ptr是一个无操作的事实,delete不会被调用,你必须手动进行。智能指针环绕原始指针并销毁指向的对象(必要时这样做)。

unique_ptrC++11 以和的形式将智能指针引入标准库shared_ptr。以 C++11 为目标时,您应该使用这些而不是 boost 。

提到数组是因为我们可以将数组表示为指向第一个元素的指针和一些大小概念。例如,char*是指向数组中第一个字符的指针,我们知道它以 . 结尾'\0'。此类数组的动态分配由new[]操作员完成(并由 破坏delete[]);标准库中的智能指针也可以处理这些类型,但通常std::vector建议使用。

于 2013-08-07T12:20:01.317 回答