禁用 copy-constructor 和 assignment-operator 时将引用实例传递给静态方法

Pass reference instance to static method when copy-constructor and assignment-operator is disabled

提问人:AudioGuy 提问时间:2/2/2021 更新时间:2/2/2021 访问量:40

问:

我的 ClassA 如下所示:

class ClassA
{
private:
    static uint32_t IDCOUNTER;
    uint32_t _id = -1;

public:
    ClassA();
    ~ClassA();
    ClassA(const ClassA&) = delete;
    void operator=(const ClassA&) = delete;
};

我想创建一个 ClassA 的特定实例,我希望它被传递,但我不希望它以任何方式被复制。因此,在我的主函数中,我实例化了 instanceA1。 接下来,(在我的主函数中),我想将这个实例存储在全局的某个地方,比如在一个静态类中:

int main()
{
    ClassA instanceA1;
    ClassStatic::SetClassA(&instanceA1);
}


// this class is declared in a separate file:
class ClassStatic
{
private:
    static ClassA *referenceToA;

public:
    static void SetClassA(ClassA* refToSingleAInstance)
    {
        referenceToA = refToSingleAInstance; // taken from cpp part of the class just for this question
    }
};

编译时,我收到链接器错误。为什么?我是不是弄错了整个概念(似乎很有可能......我该如何解决这个问题?

C++ 复制构造函数 赋值运算符

评论

1赞 U. W. 2/2/2021
您可能想看看“单例模式”以及它通常是如何实现的......
0赞 Ali Razmkhah 2/2/2021
您在哪里定义了 IDCOUNTER?和 referenceToA?
0赞 AudioGuy 2/2/2021
@AliRazmkhah我在ClassA.cpp文件中定义了它。但是我忘记用nullptr或sth初始化referenceToA。诸如此类。

答:

1赞 eerorika 2/2/2021 #1

编译时,我收到链接器错误。为什么?

因为你没有定义.ClassStatic::referenceToA

我该如何解决这个问题?

在(正好一个)翻译单元中定义。ClassStatic::referenceToA

评论

0赞 AudioGuy 2/2/2021
我不是用静态 ClassA *referenceToA; 来定义它吗??
0赞 eerorika 2/2/2021
@AudioGuy 没有如果这是定义,那么在将类定义包含在多个转换单元中时会遇到问题,因为一个定义规则不允许在多个 TU 中定义变量。
0赞 AudioGuy 2/2/2021
所以我应该在 cpp 文件中做 ClassStatic::referenceToA =nullptr 吗?对不起,我是 c++ 的新手 ;-)
0赞 AudioGuy 2/2/2021
一旦我回到我的电脑,我就会尝试。我会及时通知你。