小编Szy*_*zny的帖子

使用placement-new 运算符和复制构造函数代替赋值运算符

我在使用无法更改的第 3 方代码时发现了一个问题。我需要制作对象成员的副本。我不能严格执行此操作,因为内部成员之一具有私有赋值运算符。我找到的唯一解决方案很棘手,所以我想问你是否看到任何可能影响我的程序的红灯。

这是我正在处理的简化代码(请记住,我无法更改它!):

#include <iostream>
#include <algorithm>

class MBool
{
public:
    MBool() {};
    MBool(const MBool& arg) {}
private:    
    MBool& operator=(const MBool& arg);
};

class InnerContent {
private:
    int* pBuffer;

public: 
    InnerContent() {
        pBuffer = new int[20];
        std::cout << "InnerContent()" << std::endl;
    }

    InnerContent(const InnerContent& otherInnerContent) {
        pBuffer = new int[20];
        std::copy(otherInnerContent.pBuffer, otherInnerContent.pBuffer + 20, pBuffer);
        std::cout << "InnerContent(const InnerContent&)" << std::endl;
    }

    ~InnerContent() {
        std::cout << "~InnerContent()" << std::endl;
        delete [] pBuffer;
        pBuffer = nullptr;
    }

    virtual …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor placement-new assignment-operator

5
推荐指数
1
解决办法
1598
查看次数