在创建过程中调用对象方法 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;

我可以将 Anew 个实例推回向量,同时同时访问 sayA 方法吗?

像这样

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

在这种情况下要指出 A 不是我创建的对象,它是图形库的一部分

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

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

但实际上,IMO 这更清楚:

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

您可以让 sayA return 指向实例的指针。像这样:

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

然后插入实例如下。

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

但是除了使它工作之外,这很笨拙且难以阅读。考虑使用智能指针向量并先插入,然后调用方法。如果 sayA 是对象构造的一部分,则从 A 的构造函数中调用它。

基本上是的,如果你确保sayA()会returnthis,因为push_back()会期望指向A,不是 void,它是 sayA() 的当前 return 类型。如果你 return 任何其他指向 A 的指针,那么你将泄漏你新分配的对象,因为没有办法删除它。

但是

为什么你想要有指向 A 的指针向量,如果你可以只有 std::vector<A> As; 然后你可以像其他答案建议的那样调用 sayA() 并且以后删除它们会很头疼.