0

我尝试使用整数上的指针来实现写入时复制。但我不明白如何编写代码。这个想法在我的脑海中非常清晰:当我使用默认构造函数时,我会创建一个对象的新实例(实例数=1),当我使用复制构造函数时,我会增加实例数并进行浅拷贝的对象。

    class Myclass
{
public:
    Myclass(const char * foo, int foo2) : foo(foo), foo2(foo2) 
    {
        (*ref)=1;
    }
    Myclass(const Myclass& rhs) :foo(rhs.foo),foo2(rhs.foo2) 
    {
        (*ref)++;
    }
    const char * foo;
    int foo2;
    int *ref;
};

我从 C++ 开始,指针的概念对我来说完全是新闻,所以我尝试了这个。但我真的不明白为什么“ref”仍然等于 1,即使我使用复制构造函数创建了对象的副本。

4

2 回答 2

0

您的默认构造函数需要创建一个新的引用计数:

ref(new int(1))

并且您的复制构造函数需要使新对象以指向原始对象引用计数的指针结尾并增加它(您已经这样做了):

ref(rhs.ref)
于 2014-04-18T17:39:32.260 回答
0

我无法理解您想要什么,但我会尝试...

我创建了 Myclass foo ("foo",10),然后创建了 Myclass foo2(foo)。我希望所有 ref 都等于 2。这里只有 foo2 的 ref 等于 2。 foo 的 ref 等于 1。我想我需要一个指针,不是吗?

这可以通过静态变量来完成:

class Myclass
{
public:
    Myclass(const char * foo, int foo2) : foo(foo), foo2(foo2) 
    {
        ref += 1;
        if (1 == ref) {}    // First ref, do something?
    }
    Myclass(const Myclass& rhs) :foo(rhs.foo),foo2(rhs.foo2) 
    {
        ref += 1;
    }
    ~Myclass()           // Decrement on delete
    {
        ref -= 1;
        if (0 == ref) {} // Last reference. Do something?
    }
    const char * foo;
    int foo2;
    static int ref;
};
int Myclass::ref = 0;   // Initialize to 0

然后....

Myclass foo("foo",10);             // ref becomes 1
Myclass foo2(foo);                 // ref becomes 2
Myclass *foo3 = new Myclass(foo);  // ref becomes 3
delete foo3;                       // ref becomes 2
于 2014-04-18T16:34:46.437 回答