我在一篇关于智能指针阅读Boost创建:Boost中的作用域指针:什么意思是一个原始指针?
“scoped_ptr的有利于原始指针,而scoped_array是动态数组有用的。”
但我没有得到他们所说的“生指针”,所以也没有得到这句话。
难道你们中的任何人都可以向我解释这个吗?感谢
我在一篇关于智能指针阅读Boost创建:Boost中的作用域指针:什么意思是一个原始指针?
“scoped_ptr的有利于原始指针,而scoped_array是动态数组有用的。”
但我没有得到他们所说的“生指针”,所以也没有得到这句话。
难道你们中的任何人都可以向我解释这个吗?感谢
原始指针是由语言的语法与*
引入一个指针:
int* ptr;
这是一个正常的POD(在存储器中的“原始”数字地址)变量,所以它平凡自毁。什么是重要的,恼人原始指针是:
int* ptr = new int(42);
因为事实的
ptr
破坏是无操作
,delete
不会被调用,你必须做手工。智能指针环绕原始指针并销毁指向的对象(必要时这样做)。
C++ 11以unique_ptr
和shared_ptr
的形式将智能指针引入到标准库中。在定位C++ 11时,你应该使用那些代替boost代码的代码。
数组的提及来自于我们可以将数组表示为指向第一个元素的指针和一些大小的概念。例如,char*
是指向数组中第一个字符的指针,我们知道它在'\0'
处结束。这种阵列的动态分配由new[]
运算符完成(并且由delete[]
破坏);标准库中的智能指针也可以处理这些类型,但通常建议使用std::vector
。
他们的措辞是不幸的。通过“原始”指针,人们通常指的是原始指针类型,而不管它们指向什么。他们的意思是:
scoped_ptr适用于指向单个对象的指针,而scoped_array适用于动态数组