在创建 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;
我可以在new
A
实例的同时访问 sayA
方法的同时将实例推送回向量吗?
喜欢这个
As.push_back(new A()->sayA());
只是要指出,在这种情况下A
不是我创建的对象,它是图形库的一部分
您可以在 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
的指针,而不是void,这是当前返回类型的sayA()
。如果你返回任何其他指向A
的指针,那么你将泄漏你新分配的对象,因为没有办法删除它。
但
为什么你想有指向A
的指针向量,如果你可以std::vector<A> As;
,然后你可以按照其他答案的建议调用sayA()
,那么你以后会头疼地删除它们。
相关文章:
- 是什么让放置新调用对象的构造函数?
- 当我调用对象的方法时,对象的成员会发生变化
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 如何从构造函数副本 T(const T&)调用对象 T?
- C++17 如何保存泛型可调用对象以供以后使用
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 如何在C++中将可调用对象放入地图中?
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 广义 std::function (std::any 表示可调用对象)
- c++ 替换调用对象方法的宏函数
- 将可调用对象传递给采用 std::function 的构造函数
- 双指针在使用 new 时不调用对象构造函数
- 可调用对象作为默认模板参数
- 只需调用对象即可获取对象数据
- 如果用户尝试从 JS 调用对象的未定义函数C++则回调C++代码
- 如何将当前替代类型的 std::variant 传递给可调用对象?
- C++对象本身作为参数调用对象的方法
- 从移交的类调用对象