我有很多用C ++编写的C#代码。我没有太多的C ++经验。

我正在使用Visual Studio 2012进行构建。该项目是C ++(而不是C ++ / CLI)中的静态库。

我有一个带有一些静态实例的类,希望其他类使用它。我不希望任何人都能自己更改实例,但是我希望其他类能够区分地使用不同的实例。

用C ++实现此目的的正确方法是什么?我可以使用参考(&)吗?我必须使用指针吗?如果使用指针,是否必须为班级分配“新”?还是可以使用自动分配?

万一我想要的东西不清楚,此代码理论上将具有我想要的东西,但不会构建:

C ++ MyClas.h //这是我的带有静态实例的类

class MyClass
{
private:
    std::string name;

public:
    MyClass(void);
    MyClass(string name);
    MyClass(const MyClass&);

    ~MyClass(void);
    std::string GetName(){return name;}

    static const MyClass& Instance1();
    static const MyClass& Instance2();
};


C ++ MyClas.cpp

MyClas::MyClas(void)
{
}

MyClas::MyClas(string name)
{
    this->name = name;
}

MyClas::MyClas(const Unit& unit)
{
    name = unit.name;
}

MyClas::~MyClas(void)
{
}

const MyClas instance1= MyClas("Instance1");
const MyClas& MyClas::Instance1()
{
    return instance1;
}

const MyClas instance2= MyClas("Instance2");
const MyClas& MyClas::Instance2()
{
    return instance2;
}


我想如何使用它(虽然没有构建)

c ++ MyOtherClass.h //此类使用MyClass实例

class MyOtherClass
{
protected:
    const MyClass& myInstance;

public:
    MyOtherClass(void);
    ~MyOtherClass(void);
    void Swap(const MyClass& myInstance);
};


C ++ MyOtherClass.cpp

MyOtherClass::MyOtherClass(void): myInstance(MyClass::Instance1())
{
}

MyOtherClass::~MyOtherClass(void)
{
}

void MyOtherClass::Swap(const MyClass& instance)
{
    myInstance = instance; //Here it fails because I want to modify a const.
                            //I want to change my code so I only have 1 instance
                            //Instance1 and 1 Instance2 of MyClass, buy MyOtherClass
                            //can reference either without modifying them.
}

最佳答案

我必须使用指针吗?


是。


  我不希望任何人能够自己更改实例


因此,您需要一个指向const的指针,以防止修改指针的目标对象。


  我必须给班级分配“新”吗?


不,指针可以指向任何合适类型的对象。


  还是可以使用自动分配?


当然:

thing t1, t2;
thing const * p = &t1;  // points to t1
p = &t2;                // points to t2

09-05 06:35