我在自定义容器上工作,并手动分配一些堆内存:
template<typename element_type>
class MyClass{
element_type* m_data = nullptr;
std::size_t rows, columns; // assume that they have been initialized
inline MyClass(){
this->m_data = new element_type[(this->rows)*(this->columns)]{};
this->m_data_end = this->m_data+(this->rows)*(this->columns);
}
};
当我对代码进行分析时,XCode(以及幕后的 LLVM-Clang)告诉我
this->m_data = new element_type[(this->rows)*(this->columns)]{};
正在存储垃圾值(未初始化的值)。我不明白我在这个例子中做错了什么。任何澄清将不胜感激。
对我来说,我正在按照这个接受的答案中的建议进行操作:https://stackoverflow.com/a/67967472/23051105。
我不明白我在这个例子中做错了什么。
在进入构造函数主体之前,所有数据成员都已初始化(默认)。这意味着
rows
和 columns
保持单位化并具有 不确定值。因此,当您编写时,您正在使用这些未初始化的变量:
//-------------------------------------vvvv---------vvvvvvv----->these are uninitialized
this->m_data = new element_type[(this->rows)*(this->columns)]{};
因此,程序将具有未定义的行为。