簡體   English   中英

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM