c++ - 使用(连同)realloc 调用构造函数
问题描述
我正在使用类模板为家庭作业编写自己的 std::vector 类型。我不希望它尽可能高效,所以我更喜欢使用 realloc 函数而不是新函数。这给我带来了一个问题,因为当我为新成员分配内存时,它不会调用新成员的构造函数,这会导致很多问题。
我的课程模板的相关部分:
template<class T>
class myVec {
T *m_data;
unsigned m_size;
public:
//some methods
//some methods
myVec<T>& resize(unsigned size) {
if (size == 0)
{
delete[] m_data;
m_data = nullptr;
m_size = 0;
return *this;
}
m_data = (T*)realloc(m_data, size * sizeof(T)); //should call to constructor of T here!
m_size = size;
return *this;
};
void push(const T& t) {
m_data = (T*)realloc(m_data, ++m_size * sizeof(T));
memcpy(m_data, &t, sizeof(t));
//m_data[m_size - 1] = t;
};
~myVec() { delete[] m_data; };
};
使用 realloc(来自 C,如 malloc 和 free)以及 new 和 delete 是否错误?如果是这样,是否有类似 c++ 的 realloc 函数调用构造函数?如果没有,我如何在分配后手动调用构造函数?
解决方案
是的,realloc
以这种方式使用从根本上来说是不可挽回的错误。
例如,考虑一个有两个成员的类,其中一个是指向另一个的指针。如果您realloc
是该类的实例,则指针将不再指向另一个成员,从而破坏了它。
查看放置 new 和 move 语义或查看std::vector
.
推荐阅读
- wpf - Xaml 中的 Material Design - DialogHost 定位
- javascript - 是否可以编写单向三元运算符?
- javascript - 为什么我的 javascript 函数返回 null?
- python - 在两个轴上绘制变量增加的向量方程python
- oracle - ORA-01722 SQL Developer 中的无效数字错误消息
- python - python列表中的内存管理
- python - 有没有办法对通过 Python 中由字符串和整数组成的类创建的对象进行排序?
- python - 如何在 tkinter 中将标签文本与标签值并排保存
- python - 如何扩展颜色映射图中的颜色范围?
- java - 此烟灰依赖应用程序是否缺少依赖项?