Dum*_*ior 1 c++ templates segmentation-fault
我有以下代码:( 住在Coliru)
#include <iostream>
class ClassA{
public:
ClassA(int i) : m_int(i){};
int m_int;
};
class Master{
public:
Master(){};
~Master(){
delete m_classMain;
}
ClassA* m_classMain;
template<typename T>
void mem(T* t, int i){
t = new T(i);
}
void test() {
mem(m_classMain,3);
}
int get_i() const{
return m_classMain->m_int;
}
};
int main()
{
Master* master = new Master();
master->test();
std::cout << master->get_i() << std::endl;
delete master;
}
Run Code Online (Sandbox Code Playgroud)
我想ClassA* m_classMain通过mem(T* t, int i)模板方法初始化对象.
出于某种原因,我只会遇到分段错误.我认为t = new T(i)可能是这里的问题,但我无法理解为什么(不幸的是我手头没有调试器).
在您发布的代码中,成员变量m_classMain未初始化.调用delete它是未定义行为的原因.
电话
mem(m_classMain,3);
Run Code Online (Sandbox Code Playgroud)
m_classMain由于您按值传递它,因此不会初始化.要初始化它mem,您必须通过引用传递它.
template<typename T>
void mem(T*& t, int i){ //T*& t, not T* t.
t = new T(i);
}
Run Code Online (Sandbox Code Playgroud)
作为良好的编码实践,请确保在构造函数中初始化所有成员变量.
Master() : m_classMain(nullptr) {};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |