C :将空对象分配给现有对象
C++ : Assigning empty object to an existing object
编辑:修复了代码以清除一些混乱
正如标题所说的那样,我想知道当对象分配一个空对象时会发生什么。
这是一个特定的示例,仅操作员超载和类数据成员:
class triangle
{
vector3d p[3];
vector2d *uv = nullptr;
int nChannels = 0;
public:
void operator=(const triangle &obj)
{
delete[] uv;
nChannels= obj.nChannels;
memcpy(p, obj.p, sizeof(vec3d) * 3);
uv = new vec2d[3 * obj.nChannels];
memcpy(uv, obj.uv, 3 * obj.nChannels * sizeof(vec2d));
}
}
int main()
{
triangle p;
d = p; // where d is some initialized or uninitialized instance of triangle
d = p;
}
简而给出一个nullptr,但我不再那么确定了。
当我分配一个尚未初始化的对象时会发生什么
将调用分配运算符。在这种情况下,您已为用户声明为分配运营商。
提供的运算符(如隐式生成的运算符)读取右手操作数的状态,在这种情况下,该状态默认是初始化的。p
缺少初始评估器,因此隐式默认构造函数使其具有不确定的值。读取不确定值的行为不确定。
也就是说,如果可以首先编译该程序。它使用未申报的标识符,并且不形成不良。
,当我称
时会发生什么new triangle[0]
将创建长度0的数组。
我会期望给出新的三角[0] nullptr
您的期望被误导了。最终的指针将是非零的(除非您使用了std::nothrow
并且分配失败)。通过该指针进行间接的行为将具有不确定的行为。该程序将泄漏内存,除非分配使用delete[]
。
相关文章:
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 为对象分配整数.输出将是什么?
- C++ 使用枚举类对象分配 std::map 值
- 如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 是否可以使用 malloc 为类对象分配内存?
- 将对象分配给数组C++
- 我们可以在cpp中为对象分配函数吗
- 为模板参数类型中的新对象分配内存
- 我无法将对象分配给对象数组
- 对象分配-成员函数的使用无效错误
- 将派生对象分配给函数内的基类指针
- Arduino ESP32如何将BLEUUID对象分配到字符串中
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象
- 奇怪的对象分配行为C