我有很多用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