【发布时间】:2015-09-30 14:20:05
【问题描述】:
这与auto_ptr for arrays 非常相似。但是,我的问题是我不想要一个初始化数组,这是 vector 将提供的(const T& value = T()):
explicit vector(size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());
我不希望数组初始化,因为它是一个大数组,并且值将被立即丢弃。
我目前正在使用以下内容对其进行破解,但感觉好像有问题:
//! deletes an array on the heap.
template <class T>
class AutoCleanup
{
public:
AutoCleanup(T*& ptr) : m_ptr(ptr) { }
~AutoCleanup() { if (m_ptr) { delete[] m_ptr; m_ptr = NULL; }}
private:
T*& m_ptr;
};
还有:
// AutoCleanup due to Enterprise Analysis finding on the stack based array.
byte* plaintext = new byte[20480];
AutoCleanup<byte> cleanup(plaintext);
// Do something that could throw...
C++ 为未初始化并正确删除的 POD 类型数组提供什么?
项目是C++03,没有像Boost这样的外部依赖。
【问题讨论】:
-
你的意思是非 Boost
boost::ptr_vector? -
为什么会被立即丢弃?您要解决的实际问题是什么?
-
我不认为 new[] 和 delete[] 初始化 POD 元素..
-
请注意,
auto_ptr自 C++11 以来已被弃用,并将随 C++17 消失。 -
@ʎǝɹɟɟɟǝſ - “为什么会立即丢弃它们?” - 数组中的值会立即被覆盖。 “您要解决的实际问题是什么?” - 企业分析在放置在堆栈上的大型阵列上发现。我对此有些无所谓,但我想确保那些使用分析工具的人不会遇到任何发现。
标签: c++ arrays memory-management c++03