C++ 类型转换指针构造函数调用
我正在类型转换一个类以使用另一个类设置的存储。我想在执行类型转换时调用第一个类的构造函数。有没有办法做到这一点 考虑以下代码:C++ 类型转换指针构造函数调用,c++,constructor,casting,C++,Constructor,Casting,我正在类型转换一个类以使用另一个类设置的存储。我想在执行类型转换时调用第一个类的构造函数。有没有办法做到这一点 考虑以下代码: class A{ int x; public: A() {x = 0;} }; class B{ double x; public: B() {x =0.0f;} }; B * bObj = new(); A * aObj = reinterpret_cast < A * > ( bObj ); /
class A{
int x;
public:
A() {x = 0;}
};
class B{
double x;
public:
B() {x =0.0f;}
};
B * bObj = new();
A * aObj = reinterpret_cast < A * > ( bObj ); //Just for the sake of explaining
A类{
int x;
公众:
A(){x=0;}
};
B类{
双x;
公众:
B(){x=0.0f;}
};
B*bObj=new();
A*aObj=重新解释铸件(bObj)//只是为了解释
现在,aObj引用分配给bObj的内存并使用它并将其内容存储在那里。
我试图在执行类型转换时或之后调用类的构造函数。请帮忙
我想使用aObj和要调用的构造函数。但事实并非如此aObj无疑是在分配内存,但是构造函数调用不会发生。它里面填充了垃圾值 我正在学习C++,并试图将对象存储在通用缓冲区中。(bObj在上面的代码片段中充当缓冲区)。aObj确实有内存访问,但构造函数调用没有发生,这正是我试图实现的 听起来你需要仔细阅读placement
new
。有关使用的一些背景和示例,请参见和
请记住,正确使用placementnew
需要小心。很容易弄错,最终以失败告终
特别是,您需要重新考虑如何分配缓冲区。在
B
对象的存储中构造A
对象通常是未定义的行为
当typeB
是一个char
数组,而不是一个具有构造函数的类时,您可以(使用一个新表达式)执行此操作,但它几乎不需要,仅适用于专家,并且需要手动调用a
对象的析构函数
如果您只是想节省内存,那么您可以
- 忽略内存使用情况。
对于今天的计算机来说,这通常是最好的解决方案 - 使用派生类和虚拟成员函数
- 在最坏的情况下,使用带标签的
接头
“标记”表示存在类型标识值,即类型“标记”
- 量。也许避免动态分配和间接寻址并不是那么重要
如果还有其他问题,请说明。您能描述一下您试图解决的实际问题吗?“并且其中填充了垃圾值。”如果是,因为您通过使用
重新解释cast
的方式调用UB。请解释为什么你认为你需要这么做……NPE:我正在学习C++,并试图将对象存储在一个通用缓冲区中。(bObj在上面的代码片段中充当缓冲区)。aObj确实有内存访问权限,但构造函数调用没有发生,这正是我试图实现的。强制转换运算符不调用目标类型的构造函数。你的假设是错误的。@πάνταῥεῖ : 同意。我试图以某种方式完成构造函数调用。有什么办法吗?@Cheersandhth。-阿尔夫:我觉得你的评论有误导性。Placementnew
可能是解决上述问题的最佳工具(“将对象存储在通用缓冲区中”)。我认为我们不应该判断OP的资质,也不应该为他们决定应该允许他们使用哪些工具。你的回复评论具有误导性。所述问题不是“将对象存储在通用缓冲区中”。@NPE tx寻求帮助!我真的很感激。NPE最初建议的新工作对我来说很好。也感谢您的输入。@user3368334:它可能看起来“有效”,但它是未定义的行为。这意味着墨菲先生会在最不方便的时候来拜访你。