C++ 有没有一种方法可以在函数内部初始化对象,然后在函数外部使用它?

C++ 有没有一种方法可以在函数内部初始化对象,然后在函数外部使用它?,c++,C++,在一个家庭作业项目中,我需要使用一个对象,它的初始化由if条件控制,因此它看起来有点复杂,因此我想将初始化过程作为一个函数。但是我可以在函数内部初始化这个对象,然后在外部使用它吗 下面是代码片段: void playOneGame(Lexicon& dictionary) { // TODO: implement setConsoleClearEnabled(true); // initialize object: if yes, generate it randomly, else

在一个家庭作业项目中,我需要使用一个对象,它的初始化由if条件控制,因此它看起来有点复杂,因此我想将初始化过程作为一个函数。但是我可以在函数内部初始化这个对象,然后在外部使用它吗

下面是代码片段:

void playOneGame(Lexicon& dictionary) {
// TODO: implement
setConsoleClearEnabled(true);

// initialize object: if yes, generate it randomly, else by human input
if (getYesOrNo("Do you want to generate a random board?")) {
    // generate boggle randomly by using constructor
    Boggle myBoggle(dictionary, "");
} else {
    string boardText = getLine("Type the 16 letters to appear on the board:"); 
    //boardText = stripText(boardText);
    while (boardText.length() != 16 || containsNonAlpha(boardText)) {
        cout << "That is not a valid 16-letter board string. Try again." << endl;
        boardText = getLine("Type the 16 letters to appear on the board:");
    }  

}
void playOneGame(词典和字典){
//TODO:实现
SetConsoleLearEnabled(真);
//初始化对象:如果是,则随机生成,否则由人工输入
if(getYesOrNo(“是否要生成随机板?”){
//用构造函数随机生成boggle
Boggle myBoggle(字典“”);
}否则{
string boardText=getLine(“键入要显示在板上的16个字母:”);
//boardText=条带文本(boardText);
while(boardText.length()!=16 | | containsNonAlpha(boardText)){
库特
}

Boggle设置板(词典和词典){
if(getYesOrNo(“是否要生成随机板?”){
Boggle myBoggle(字典“”);
返回myBoggle;
}否则{
string boardText=getLine(“键入要显示在板上的16个字母:”);
//boardText=条带文本(boardText);
while(boardText.length()!=16 | | containsNonAlpha(boardText)){

尝试时会发生什么?当然,可以在本地创建并返回副本,也可以动态创建并返回智能指针。这是家庭作业:可能使用指向指针的指针。我想我已经解决了。@LeonloveKaren然后与您分享解决方案。这可能对其他人有帮助。您只需编写
return Boggle(dictionary),”
。我相信这也可能有助于编译器使用优化删除副本。带有命名变量的多个返回点是编译器可能无法删除副本的情况之一。
void playOneGame(Lexicon& dictionary) {
// TODO: implement
setConsoleClearEnabled(true);

Boggle myBoggle = setupBoard(dictionary);
Boggle setupBoard (Lexicon& dictionary) {
if (getYesOrNo("Do you want to generate a random board?")) {
    Boggle myBoggle(dictionary, "");
    return myBoggle;
} else {
    string boardText = getLine("Type the 16 letters to appear on the board:");
    //boardText = stripText(boardText);
    while (boardText.length() != 16 || containsNonAlpha(boardText)) {
        cout << "That is not a valid 16-letter board string. Try again." << endl;
        boardText = getLine("Type the 16 letters to appear on the board:");
    }
    Boggle myBoggle(dictionary, boardText);
    return  myBoggle;
}