![](/img/trans.png)
[英]Pointer to STL Container Thread Safety (Queue/Deque)
[英]private constructor with STL container deque
我有一個使用std :: deque的類Table
class Table {
public:
Table():columns_(10) {};
private:
std::deque<Column> columns_
}
我希望只有class Table可以初始化class列,所以我做下面的事情
class Column {
private:
int a_;
friend class Table;
Column(): a_(1) {};
}
在編譯期間,STL容器抱怨Columns類的構造函數是private,據我了解,但是還有另一種方法來確保只有Class Table可以初始化Column類,並且仍然可以在STL容器內使用它。
在您的特定情況下,將以下聲明添加到Column
就足夠了:
friend class std::deque<Column>;
通常,如果要使用這種模式,就無法預先調整容器的大小,則需要一個一個地添加容易構造的對象。
但是,在支持此功能的容器(例如std::vector
)上,可以使用reserve
然后使用push_back
。
創建一個std::deque<std::unique_ptr<Column>> columns_
,讓Table
構造列並填充雙端隊列
例如
class Table
{
public:
Table()
: columns_(10)
{};
void addColumn()
{
columns.push_back(std::unique_ptr<Column>(new Column));
};
private:
std::deque<std::unique_ptr<Column>> columns_
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.