如何确定 C++ 内存是否分配了标量 new 或数组 new

How to find out if C++ memory was allocated with scalar new or array new

提问人: 提问时间:6/20/2023 更新时间:6/20/2023 访问量:71

问:

我正在努力优化我的 C++ 库中的智能指针。除了内置指针和引用计数之外,指针还有一个布尔值,说明指针是标量还是数组(即,它是用 new 或 new[] 运算符分配的)。然后,该类的析构函数使用此布尔值来确定要执行哪种类型的释放(分别为 delete 或 delete[]。

手动指定这个布尔值似乎有点奇怪,所以我想知道,是否有办法隐式地做到这一点。

Github 上的完整代码。

C++ new-operator 智能指针 delete-operator

评论

2赞 NathanOliver 6/20/2023
所以我想知道,是否有办法隐含地做到这一点。没有。这就是标准库中的智能指针使用 和 来区分单个对象和数组的原因。smart_pointer<T>smart_pointer<T[]>
0赞 fabian 6/20/2023
为什么不做做什么并为???添加专业化(请参阅此处的版本 (2):en.cppreference.com/w/cpp/memory/unique_ptr )或者,您可以添加另一个模板参数,该参数可以是删除器类型或非类型模板参数...std::unique_ptrmy_smart_ptr<T[]>
0赞 6/20/2023
@fabian 我没有完全理解你。我从未使用过这样的语法:作为类型名。您能否提供一些关于如何实现此功能的代码?T[]
1赞 PaulMcKenzie 6/20/2023
@Justaprogrammer 该页面给出了一个完整的示例。此外,您的类似乎是对已经存在的东西的重新发明,.Pointerstd::unique_ptr
0赞 Jeremy Friesner 6/20/2023
没有便携式方法可以做到这一点。可能有一些黑客方法适用于某些编译器和运行时环境,但试图利用它们会非常麻烦,因为当您尝试在其他环境中使用它时,代码会中断(甚至可能只是同一编译器的未来版本)

答: 暂无答案