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++; 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具有移动构造函数。不管怎样,第二张表格都会复印一份 就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地

这是类字典的构造函数。 我想创建一个word对象并将其添加到vector。 我应该写信吗 单词[road.length()]。向后推(单词(road,st)); 或 单词w(花圈,st); 单词[花圈长度()]。向后推(w);
w将在堆栈上分配,当我们离开构造函数时,它将被删除。

在C++11中,第一种形式是
push_back(Word())
将更加高效,iff
Word
具有移动构造函数。不管怎样,第二张表格都会复印一份

就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然


除非受到向后兼容性的限制,否则应使用
vector::emplace_back
并传递
T
的值或其构造函数之一的参数。

在C++11中,第一种形式是
push_back(Word())
将更加高效,iff
Word
具有移动构造函数。不管怎样,第二张表格都会复印一份

就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然


除非受到向后兼容性的限制,否则应使用
vector::emplace_back
并传递
T
的值或其构造函数之一的参数。

在C++11中,第一种形式是
push_back(Word())
将更加高效,iff
Word
具有移动构造函数。不管怎样,第二张表格都会复印一份

就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然


除非受到向后兼容性的限制,否则应使用
vector::emplace_back
并传递
T
的值或其构造函数之一的参数。

在C++11中,第一种形式是
push_back(Word())
将更加高效,iff
Word
具有移动构造函数。不管怎样,第二张表格都会复印一份

就功能而言,两者是等效的。第二个污染了范围,第一个没有。第一种方法更有可能有效地进行优化,第二种方法则不然


除非受到向后兼容性的限制,否则您应该使用
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该标准没有指定该行为