在创建过程中调用对象方法 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;
我可以将 A
的 new
个实例推回向量,同时同时访问 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()
并且以后删除它们会很头疼.
所以说我有一个对象,说A
,像这样
class A {
private:
int x;
public:
A(){};
~A(){};
void sayA() {
std::cout << "A" << std::endl;
}
};
现在如果我有一个指向A
std::vector<A *> As;
我可以将 A
的 new
个实例推回向量,同时同时访问 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()
并且以后删除它们会很头疼.