C++ 在堆栈或堆c++; Dictionary::Dictionary(){ 河流充填; 填空(“文字”); 弦环; while(getline(填充、环)){ 插入(花圈); 向量st=读取::三角形(圈); //单词w(花圈,圣)stack försvinner när vi lämnar metoden。 words[road.length()]。向后推(Word(road,st));//堆栈eller堆 } infle.close(); }
这是类字典的构造函数。 我想创建一个word对象并将其添加到vector。 我应该写信吗 单词[road.length()]。向后推(单词(road,st)); 或 单词w(花圈,st); 单词[花圈长度()]。向后推(w);C++ 在堆栈或堆c++; Dictionary::Dictionary(){ 河流充填; 填空(“文字”); 弦环; while(getline(填充、环)){ 插入(花圈); 向量st=读取::三角形(圈); //单词w(花圈,圣)stack försvinner när vi lämnar metoden。 words[road.length()]。向后推(Word(road,st));//堆栈eller堆 } infle.close(); },c++,C++,这是类字典的构造函数。 我想创建一个word对象并将其添加到vector。 我应该写信吗 单词[road.length()]。向后推(单词(road,st)); 或 单词w(花圈,st); 单词[花圈长度()]。向后推(w); w将在堆栈上分配,当我们离开构造函数时,它将被删除。在C++11中,第一种形式是push_back(Word())将更加高效,iffWord具有移动构造函数。不管怎样,第二张表格都会复印一份 就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地
w将在堆栈上分配,当我们离开构造函数时,它将被删除。在C++11中,第一种形式是
push_back(Word())
将更加高效,iffWord
具有移动构造函数。不管怎样,第二张表格都会复印一份
就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然
除非受到向后兼容性的限制,否则应使用
vector::emplace_back
并传递T
的值或其构造函数之一的参数。在C++11中,第一种形式是push_back(Word())
将更加高效,iffWord
具有移动构造函数。不管怎样,第二张表格都会复印一份
就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然
除非受到向后兼容性的限制,否则应使用
vector::emplace_back
并传递T
的值或其构造函数之一的参数。在C++11中,第一种形式是push_back(Word())
将更加高效,iffWord
具有移动构造函数。不管怎样,第二张表格都会复印一份
就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然
除非受到向后兼容性的限制,否则应使用
vector::emplace_back
并传递T
的值或其构造函数之一的参数。在C++11中,第一种形式是push_back(Word())
将更加高效,iffWord
具有移动构造函数。不管怎样,第二张表格都会复印一份
就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然
除非受到向后兼容性的限制,否则您应该使用
vector::emplace\u back
并传递T
的值或其构造函数之一的参数。您提到的表单都不会在堆上分配。要在堆上进行分配,通常使用new
关键字
Dictionary::Dictionary() {
ifstream infile;
infile.open("words");
string wread;
while(getline(infile,wread)){
wordset.insert(wread);
vector<string> st =Read::Trigrams(wread);
//Word w(wread,st) stack försvinner när vi lämnar metoden.
words[wread.length()].push_back(Word(wread,st)); //stack eller heap
}
infile.close();
}
在堆上还有其他分配方法,包括
std::make_shared
。但是你的样品中没有用到。仅使用Word()
将在堆栈上分配您提到的两种形式都不会在堆上分配。要在堆上进行分配,通常使用new
关键字
Dictionary::Dictionary() {
ifstream infile;
infile.open("words");
string wread;
while(getline(infile,wread)){
wordset.insert(wread);
vector<string> st =Read::Trigrams(wread);
//Word w(wread,st) stack försvinner när vi lämnar metoden.
words[wread.length()].push_back(Word(wread,st)); //stack eller heap
}
infile.close();
}
在堆上还有其他分配方法,包括
std::make_shared
。但是你的样品中没有用到。仅使用Word()
将在堆栈上分配您提到的两种形式都不会在堆上分配。要在堆上进行分配,通常使用new
关键字
Dictionary::Dictionary() {
ifstream infile;
infile.open("words");
string wread;
while(getline(infile,wread)){
wordset.insert(wread);
vector<string> st =Read::Trigrams(wread);
//Word w(wread,st) stack försvinner när vi lämnar metoden.
words[wread.length()].push_back(Word(wread,st)); //stack eller heap
}
infile.close();
}
在堆上还有其他分配方法,包括
std::make_shared
。但是你的样品中没有用到。仅使用Word()
将在堆栈上分配您提到的两种形式都不会在堆上分配。要在堆上进行分配,通常使用new
关键字
Dictionary::Dictionary() {
ifstream infile;
infile.open("words");
string wread;
while(getline(infile,wread)){
wordset.insert(wread);
vector<string> st =Read::Trigrams(wread);
//Word w(wread,st) stack försvinner när vi lämnar metoden.
words[wread.length()].push_back(Word(wread,st)); //stack eller heap
}
infile.close();
}
在堆上还有其他分配方法,包括std::make_shared
。但是你的样品中没有用到。简单地使用Word()
将在堆栈上分配执行此操作的“正确”方法是使用emplace\u back
,它将在适当的位置构造单词,甚至删除移动
请注意,emplace\u back
采用与对象构造函数相同的参数。执行此操作的“正确”方法是使用emplace\u back
,它将在适当的位置构造单词,甚至删除移动
请注意,emplace\u back
采用与对象构造函数相同的参数。执行此操作的“正确”方法是使用emplace\u back
,它将在适当的位置构造单词,甚至删除移动
请注意,emplace\u back
采用与对象构造函数相同的参数。执行此操作的“正确”方法是使用emplace\u back
,它将在适当的位置构造单词,甚至删除移动
请注意,
emplace\u back
采用与对象构造函数相同的参数。没有区别,它们都是在堆栈上分配的。实际上,您应该使用emplace\u back
,以提高性能和清晰度。@HansPassant标准实际上没有规定这一点,但实际上您是正确的。具有自动存储持续时间的对象几乎总是在堆栈上分配。但是,只要生命周期仍然是自动的,实现可以选择在堆上分配。@Mgetz“具有自动存储持续时间的对象几乎总是在堆栈上分配”-uhh否。那么所有在类中声明的值对象呢?这没有区别,它们都是在堆栈上分配的。实际上,您应该使用emplace\u back
,以提高性能和清晰度。@HansPassant该标准没有指定该行为