gpt4 book ai didi

c++ - 类型转换指针构造函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:54 24 4
gpt4 key购买 nike

我正在对一个类进行类型转换以使用另一个类设置的存储。我想在执行类型转换时调用第一个类的构造函数。有什么办法可以实现吗?

考虑以下代码:

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

现在 aObj 引用分配给 bObj 的内存并使用它并将其内容存储在那里。我试图在执行类型转换时或之后调用 A 类的构造函数。请帮忙。

我想使用aObj 和要调用的A 的构造函数。这不会发生。毫无疑问,aObj 正在分配内存,但是构造函数调用不会发生。并且其中填充了垃圾值。

最佳答案

B对象的存储中构造一个A对象一般是Undefined Behavior。

当类型 Bchar 的数组而不是带有构造函数的类时,您可以这样做(使用 placement new 表达式),但很少需要它,仅适用于专家,并且需要手动调用 A 对象的析构函数。

如果你只是想节省内存那么你可以

  • 忽略内存占用。
    对于当今的计算机,这通常是最佳解决方案。

  • 使用派生类和虚拟成员函数。

  • 在最坏的情况下,使用带标签的union
    “标记”是指有一个类型标识值,一个类型“标签”。

如果你想为 PIMPL 习语节省执行时间,

  • 测量。可能避免动态分配和间接寻址并不是那么重要。

如果还有别的,请说明是什么。

关于c++ - 类型转换指针构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com