【发布时间】:2019-07-17 07:31:01
【问题描述】:
假设我有一个对象,比如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 不是我创建的对象,它是图形库的一部分
【问题讨论】:
-
它们不被称为“同时”。你的最后一行相当于
auto a = new A(); auto b = a->sayA(); As.push_back(b);。 -
'new A()->sayA()' 的结果是无效的。你的向量用 A* 参数化。由于 sayA 返回 void - 不,你不能。如果您将其更改为 'const A* sayA() {... return this;}' 那么您可以尝试使用 const_cast。但你最好不要这样做。
-
请定义“创建期间”。有一个叫做构造函数的东西,它运行的正是里面的东西。但实际上,无论你在调用
new之后写什么代码都放在构造函数调用的后面,所以本质上没有区别。
标签: c++ instantiation