相关疑难解决方法(0)

754
推荐指数
22
解决办法
55万
查看次数

默认赋值运算符=在c ++中是浅拷贝?

只是一个简单的快速问题,我无法找到其他任何地方的可靠答案.默认运算符=只是右侧所有类成员的浅表副本吗?

Class foo {
public:
  int a, b, c;
};

foo f1, f2;
...
f1 = f2;
Run Code Online (Sandbox Code Playgroud)

将与以下内容相同:

f1.a = f2.a;
f1.b = f2.b;
f1.c = f2.c;
Run Code Online (Sandbox Code Playgroud)

当我测试它时,这似乎是真的,但我需要确定我没有错过某些特定情况.

c++ operators shallow-copy

38
推荐指数
5
解决办法
3万
查看次数

你多久一次实施三巨头?

我只是在思考这里的问题数量,要么是关于"三巨头"(复制构造函数,赋值运算符和析构函数),要么是关于它们没有被正确实现的问题,当我发现我不记得了上次我自己实施了它们.对我最活跃的两个项目的快速grep表明,我在大约150个类中只实现了所有三个类.

这并不是说我没有实现/声明它们中的一个或多个 - 显然基类需要一个虚拟析构函数,而且我的大量类禁止使用私有拷贝ctor和assignment op idiom进行复制.但是完全实现了,有一个孤独的类,它做了一些引用计数.

所以我想知道我在这方面不寻常吗?你经常实施所有这三个功能?您实现它们的类是否有任何模式?

c++

15
推荐指数
1
解决办法
990
查看次数

C++拷贝对象

我有一个Game包含其他对象的类GameGrid:

Game.h

class Game
{
        public:
            Game(uint32_t GridSize);
        private:
            GameGrid _CurrentGrid;
}
Run Code Online (Sandbox Code Playgroud)

Game.cpp

Game::Game(uint32_t GridSize) : _CurrentGrid(GridSize)
{
}
Run Code Online (Sandbox Code Playgroud)

GameGrid.h

class GameGrid
{       
        public:
            GameGrid(uint32_t GridSize);
            void setGrid(const Grid& Grid);
            const GameGrid::Grid getGrid(void) const;
        private:
            Grid _Grid;
}
Run Code Online (Sandbox Code Playgroud)

GameGrid.cpp

GameGrid::GameGrid(uint32_t GridSize)
{
    uint32_t i = 0;
    uint32_t j = 0;

    _Grid.assign(GridSize, std::vector<unsigned int>(GridSize));

    for (i = 0; i < GridSize; i++)
    {
        for (j = 0; j < GridSize; j++)
        {
            _Grid.at(i).at(j) = 0;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
842
查看次数