我与新的运营商已经取得了私人的某一等级的工作,这样就得到一个实例的唯一方法是写类实例的大小
Foo foo = Foo()
写作
Foo* foo = new Foo()
不起作用。
但是,因为我真的想它的指针,我模拟与以下:
Foo* foo = (Foo*)malloc(sizeof(Foo));
*foo = Foo();
,这样可以测试指针是否为空知道是否已经被初始化。
它看起来像它的工作原理,从实证检验,但有可能是没有足够的空间已被分配的malloc?或者别的东西变得有趣?
---编辑---
A未提及的背景下,因为我本来就不是肯定他们为什么新的运营商被禁用。这个类是约束编程库(gecode)的一部分,我认为它可能被禁用,以强制指定模型的文档化方式。
我不知道具体的数据类型成语,这看起来更合理。
即指定一个标准模型---在一切被指定为在太空的派生类CDTs时分配方案可能被罚款---但对我来说,这些实例分别由特定的类创建,然后通过通过引用表示模型的类的构造函数。
关于原因,我没有使用
Foo f;
Foo *pf = &f;
它会像做情况1以下,它抛出一个“回头参照本地变量”警告
int& f() { int a=5; return a; } // case 1
int& f() { int a=5; int* ap=&a; return *ap; }
int& f() { int* ap=(int*)malloc(sizeof(int)); *ap=5; return *ap; }
这警告在情况2中添加指针时消失,但我想这是因为编译器丢失了跟踪。
所以,唯一的选择就是情况下3(不提的是additionaly,ap
是将只有一次当f被称为初始化类的成员,将为空否则,是返回的唯一功能这种方式,我相信ap
在这种情况下失去了它的意义,因为compilier优化它(可能会发生?)
但我想这远远超出了原来的范围现在的问题...
为什么你真的想要一个指针呢?难道你不能做像Foo foo = Foo(); Foo * fooPtr = &foo; – Hogan 2010-10-05 16:46:13
我可能是错的,但这样做对我来说似乎很奇怪。 'delete'也是私人的吗?否则,你的代码中会显式地删除'''',但不会''新建''。这很难追踪。 – John 2010-10-05 16:48:17
为什么不用'&foo'来获取对象的地址?你为什么要做'malloc'? – Naveen 2010-10-05 16:48:51