Lih*_*ihO 13
这是一个简单的例子:
#include <memory>
struct X { int a,b,c; };
int main()
{
std::shared_ptr<X> sp(new X);
X* np = new X;
delete np;
}
Run Code Online (Sandbox Code Playgroud)
np
是指向类型对象的指针X
- 如果你已动态分配(new
/ malloc
)这个对象,你必须delete
/ free
它......简单的指针就像np
被称为"裸指针".
sp
是一个包含指向托管资源的指针的对象,这意味着您可以像使用它一样使用它np
,但是当没有shared_ptr
拥有此资源的对象时,资源将被释放,因此您不必使用delete
它.智能指针负责内存管理,因此您不必;)
Mat*_*lia 12
"裸指针"是一个"普通"指针,即标准和C++上的任何书籍调用指针.这是通常的" T *
"(T
指针指向的类型).
"赤裸裸"的术语开始反对他们使用智能指针,智能指针是在许多方面表现为指针的类(通常它们会使运算符超载*
,->
在某些情况下[]
).
智能指针是"智能"的,因为它们指定并强制执行一些所有权语义,消除了裸指针的"愚蠢":事实上,裸指针不指定/知道它们是否拥有它们所指的对象(例如,如果它必须被释放当指针超出范围时),即使有一些命名约定,已知某些指针拥有该对象,如果指向,该语言不会强制执行此操作,因此,如果指针超出范围而没有人手动释放指向对象(通常在发生异常时会发生这种情况)您有内存泄漏.
相反,智能指针利用C++类型系统的保证(复制构造函数,赋值运算符,对析构函数的保证调用,......)来建立和实施某种所有权(通常:严格且不可转移,严格但可以转移)到另一个智能指针,在几个智能指针之间共享).
...话虽如此,有很多关于StackOverflow和互联网上智能指针的讨论,我很确定你能够找到更多关于智能指针的讨论,以及为什么使用拥有对象的裸指针通常现代C++程序中的Bad Thing TM.
fre*_*low 10
裸指针(原始指针,"哑"指针)是C风格的指针T*
.将此与C++提供的"智能"指针(std::shared_ptr<T>
,std::weak_ptr<T>
和std::unique_ptr<T>
)进行对比.
归档时间: |
|
查看次数: |
7250 次 |
最近记录: |