【发布时间】:2017-06-06 15:55:54
【问题描述】:
MCVE
#include <map>
class A{
public:
A(int){
}
};
class B : public A{
public:
B()
: A(filter()){}
int filter(){
std::map<int,int> aStuff;
//new(&m_aStuff)std::map<int,int>;
m_aStuff = aStuff;
return 0;
}
private:
std::map<int,int> m_aStuff;
};
int main(){
B b;
return 0;
}
这在编译时失败,因为 m_aStuff 未初始化。 使用answer我添加了
new(&m_aStuff)std::map<int,int>;
如果您取消注释该行,它将在编译时运行,但是当您离开过滤器类时,m_aStuff 无论如何都会重新初始化。
【问题讨论】:
-
您能否显示此无效代码,以便我们更好地了解您想要完成的工作?
-
您是正确的,您不能以这种方式使用未初始化的变量,但还有另一个问题。自动移动可能不会做你想做的事;
m_aStuff = std::move(m_aStuff);可能使m_aStuff处于有效但未指定的状态。 -
bar和A是什么关系?b和a的类型有些混乱。 -
我不介意提供原始代码,但我试图将其归结为基本代码。未显示的所有内容都可以正常工作。
-
这似乎是XY problem 的情况。退后一步,解释一下为什么你认为你需要这样做。
标签: c++