C++ 为什么在我的程序中调用了两次构造函数?
以下程序中世界对象的构造函数被调用两次 头文件:C++ 为什么在我的程序中调用了两次构造函数?,c++,C++,以下程序中世界对象的构造函数被调用两次 头文件: #ifndef GAME_H #define GAME_H #include "World.h" class Game { public: Game(); private: World world; }; cpp文件:- #include "Game.h" Game::Game() { world = World(); } 世界级的头文件:- #ifndef WORLD_H #def
#ifndef GAME_H
#define GAME_H
#include "World.h"
class Game
{
public:
Game();
private:
World world;
};
cpp文件:-
#include "Game.h"
Game::Game()
{
world = World();
}
世界级的头文件:-
#ifndef WORLD_H
#define WORLD_H
class World
{
public:
World();
};
#endif // WORLD_H
世界级的cpp文件:-
#include "World.h"
#include <iostream>
using namespace std;
World::World()
{
cout<<"i am going to print twice"<<endl;
}
#包括“World.h”
#包括
使用名称空间std;
世界::世界()
{
cout你的类定义说Game
有一个World
成员,因此创建一个游戏实例将自动创建一个世界。然后在你的构造函数中,你第二次分配this->World
并创建第二个实例,这就是第二次调用
您可以在构造函数中完全省去这一行。如果您希望传递参数来初始化World
,那么您可以这样做
Game::Game(someArg) : world(someArg){
}
当构建游戏
时,世界
也是默认构建的,因为它是世界
的成员,这是第一个
第二次是在Game::Game
:使用以下代码构造一个临时World
对象并将其分配给World::World
world = World();
您可能想要的是:
Game::Game()
{
}
您不需要默认的构造和赋值。在构造函数开始之前,每个成员都会自动初始化;因为您在初始化器列表中不包括world
,所以默认在该点初始化,调用您的构造函数
然后创建一个临时对象来分配给它;这会导致第二个构造函数调用。没有必要这样做。请。您必须在这里快速操作:)当您可以直接将someArg
传递到World::World
时,为什么要调用类World
的复制构造函数?