[英]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.