繁体   English   中英

SmartPointers和数组指针

[英]SmartPointers and pointer to array

美好的一天! 关于智能指针的小问题。 通常,我有指向BYTE数组的指针,我想使用std::shared_ptr而不是普通指针。 这是我的指针示例

shared_ptr<BYTE> pointer(new BYTE[100]);
LPBYTE *old_pointer = pointer;

当然这是无效的示例,但是如何将我的smartpointer分配给其他通用指针?

您可能正在要求

std::shared_ptr<std::array<BYTE,100>> pointer(make_shared<std::array<BYTE,100>>());
LPBYTE old_pointer = pointer.get()->data();

要获得其他参考,您可以简单地声明如下

// increases reference count
std::shared_ptr<std::array<BYTE,100>> pointer2 = pointer;

请在此处查看详细文档: std::shared_ptr构造函数std::shared_ptr::get()

虽然记住:
使用std::shared_ptr::get()访问智能指针的指针将绕过使用std::shared_ptr提供的语义和功能。 强烈建议不要这样做,除非您非常了解old_pointer在做什么,以及是否还在范围之内。

您可以使用get_pointer(shared_ptr <>)访问原始指针

BYTE * raw_pointer = get_pointer(pointer);

正如其他人指出的那样,获取原始指针意味着您现在拥有的引用未被计数,并且如果不小心的话可能会导致潜在的危险。

另外,如果使用shared_ptr <>来保存指向原始数组的指针,则需要在原始指针上调用delete []而不是delete。 这意味着您将需要一个自定义删除器。 我意识到您的示例可能只是说明性的,而不是字面意义,但仍然认为值得指出。

boost :: shared_ptr的最新版本可以容纳动态分配的数组。 该功能已添加到图书馆基础知识TS (标准化过程的一部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM