在C++中,如何在没有动态分配(即NEW)的情况下将对象初始化为对象内部的指针
How to initialize an object to a pointer inside an object without dynamic allocation(ie NEW) in C++?
例如:
class A{
int b;
A *a1;
A *a2;
A(int c):b(c), a1(c), a2(c) {}
}
我以为是这样的,但它没有编译。有没有办法做到这一点,或者有必要始终使用动态分配?感谢
您可以简单地将指针初始化为null。
class A{
int b;
A *a1;
A *a2;
A(int c):b(c), a1(NULL), a2(NULL) {}
}
(注意,如果它抱怨没有定义NULL,#include <cstddef
>)
或者根本不初始化它们。
class A{
int b;
A *a1;
A *a2;
A(int c):b(c) {}
}
不清楚你想做什么,但你肯定能做到:
class A{
int b;
A *a1;
A *a2;
A(int c, A* pa1, A* pa2):b(c), a1(pa1), a2(pa2) {}
}
你可以这样称呼它:
A m1(1, NULL, NULL);
A m2(2, NULL, NULL);
if(something())
{
A m3(3, &m1, &m2);
// do stuff with m3
}
只要小心。如果m1
或m2
在m3
之前超出范围,则m3
将留下指向随机垃圾的指针。
如果您不想像这样初始化指向nullptr
(NULL
或0
在C++11之前)的指针:
class A {
A(int c) : b(c), a1(), b1() { }
int b;
A* a1, *a2;
};
那么,要么使指针指向的对象必须存在于某个外部范围中,以便它至少与包含指针的对象一样长,要么必须使用new
。
您可以接受A*
将指针设置为:
class A {
A(int c, A* aptr) : b(c), a1(aptr), a2(aptr) { }
...
};
(你不能使用引用,因为这会使A
成为A
的要求,这是一个不可能满足的条件。不过,你可以制作一个接受引用的额外构造函数。)
在您的示例中,您试图使用int
初始化一个指针,但该指针不起作用。此外,如果您在示例中创建一个对象(通过new
或其他方式),您将耗尽内存,因为您分配的每个A
将再分配两个A
,并且该循环将持续到内存耗尽。
相关文章:
- 如何从传递到对象的对象内部访问对象的类属性?
- 对象内部对象的重载功能
- 为什么我不能更改实例化对象内部的向量?
- 对象内部有大量数据容器,实现更高效的对象交换
- 微机器人 - 检查点是否在对象内部
- C++:访问对象内部子对象的方法
- 如果访问对象,则指向的对象内部的指针会更改内存位置
- shared_ptr - 从包含的对象内部访问
- 如何创建功能以用受保护或私人侵犯的对象在对象内部操纵对象
- 如何从对象内部的 typedef 获取模板参数类型
- DirectX 11渲染对象内部
- 引用对象内部的指针
- 访问对象内部的指针
- 访问检测到的对象/c++内部的像素值
- 如何在linux x64上创建共享库对象,该对象内部使用C++异常,并且可以在旧平台上运行
- OpenGL检测单击另一个对象内部的对象
- 如何在类对象内部分配数组
- 在基类对象内部创建派生类对象
- 多态对象内部的C++引用
- 在C++中,如何在没有动态分配(即NEW)的情况下将对象初始化为对象内部的指针