簡體   English   中英

在創建c ++期間調用對象方法

[英]Calling object method during creation c++

所以說我有一個對象,比如A ,就像這樣

class A {
  private:
    int x;
  public:
    A(){};
    ~A(){};
    void sayA() {
      std::cout << "A" << std::endl;
    }
};

現在如果我有一個指向A的指針

std::vector<A *> As;

我可以在同時訪問sayA方法的同時將A new實例推回向量嗎?

像這樣

As.push_back(new A()->sayA());

只是在這種情況下指出A不是我創建的對象,它是圖形庫的一部分

你可以(ab)在C ++ 17中使用emplace_back

As.emplace_back(new A())->sayA();

但實際上,IMO這個更清楚:

As.push_back(new A());
As.back()->sayA();

你可以讓sayA返回一個指向實例的指針。 像這樣:

auto sayA() {
  std::cout << "A" << std::endl;
  return this;
}

然后按如下方式插入實例。

As.push_back((new A())->sayA());

但除了使它工作之外,這很難閱讀。 考慮使用智能指針向量並首先插入,然后調用方法。 如果sayA是對象構造的一部分,請從A的構造函數中調用它。

基本上是的, 如果你確保sayA()將返回this ,因為push_back()將指向指向A指針,而不是作為當前返回類型sayA() void。 如果你返回任何其他指向A指針,那么你將泄漏新分配的對象,因為沒有辦法刪除它。

為什么你想要有一個指向A的指針向量並且如果你可以只有std::vector<A> As;那就很難刪除它們std::vector<A> As; 然后你可以像其他建議一樣調用sayA()

暫無
暫無

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

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