c++:如何在堆栈内存中创建指向生成它的对象的对象
C++: how do I create an object in stack memory that points to the object I am generating it from?
我有一个带有构造函数Foo(Bar * b)的类Foo。我想在类Bar内部有一个函数,返回指向该Bar的Foo。我试着:
Foo& Bar::make_foo() {
Foo f((Bar*)this);
return f;
}
但是g++告诉我:
error: variable ‘Foo f’ has initializer but incomplete type
现在我知道这在堆内存中会很好地工作:
Foo* Bar::make_foo() {
Foo * f = new Foo((Bar*)this);
return f;
}
编辑:显然问题是由于一个不完整的类定义。然而,我仍然很好奇是否有一个合适的习语来返回堆栈内存中的对象。
这段代码无论如何都是错误的,因为它返回的是堆栈上的对象,这意味着一旦从函数返回,该空间可用于存储其他对象-这将不会很好地结束。
Foo& Bar::make_foo() {
Foo f((Bar*)this);
return f;
}
只要声明了Bar
,你就应该能够很好地做到这一点——除了担心"你正在使用即将被释放的堆栈空间"。
以下内容适用于我(http://codepad.org/feWQYjtt)。注意:我稍微改变了make-foo
的签名,返回局部对象的引用没有意义。
struct Bar;
struct Foo {
Foo( Bar * ) {}
};
struct Bar {
Foo make_foo() { // Signature changed
return Foo( this );
}
};
int main() {
Bar barObj;
Foo fooObj = barObj.make_foo();
(void) fooObj;
}
相关文章:
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 具有包含其他对象的类的对象创建顺序
- 为什么我们再次从结构对象创建结构变量?
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- 如何为自定义模板对象创建专门的函数模板
- 对象创建错误的C++矢量
- 如何为Python Swigged C++对象创建和分配回调函数
- 在 C++ 中为 C 样式对象创建一个透明包装类
- 此类模板的对象创建如何工作?
- C++ 中的对象创建类型有什么区别?
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何仅通过父类对象限制对象创建
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 无法将类对象创建为另一个类的成员
- 如何从现有基类对象创建派生类对象
- 在 DTor 之前删除的静态对象创建的线程?
- C++:定义多个构造函数时的对象创建/销毁序列
- 从对象创建矢量包装器,该对象只允许使用索引访问向量
- 是否可以为CPP中的对象创建一组指针