English 中文(简体)
确保点名不删除
原标题:Ensuring pointer is not deleted
  • 时间:2009-11-10 11:30:20
  •  标签:
  • c++
  • pointers

我 st卑地 something了我可以说出的东西,因此,我认为,在更大的C++图像中,我没有东西。

简言之,我的问题是:如何在某类物体中保持一种可变的、不可删除的、可能的话的民族解放军。

更长的版本是:

我有以下设想:一门课堂(我可以稍作改动,但并非完全令人满意),其中多数需要使用物体。 虽说这个目标由他人管理,但绝不能删除。

买方的一些班级不需要这样的物品——它们从其他班级重新使用代码,但通过向这些班级提供的现有参数,保证即使供应物体,也不会使用。

目前的实施使用点对目标(const Obj*)。 这反过来又意味着所有物体的方法必须一致,而且大多数领域都不稳定。 这是一种重大的解决办法,因为宣布的<条码>可变的田地可供检查(在C++ lite entry here)。 它还只是部分解决了“不提的”问题(供应商没有抱怨,而是在标语前面的<条码>。

如果我提到这个物体,我就迫使一些打电话者制造一个“大米”物体,并提供给他们正在问到的那类物品。 这不仅浪费了资源,也令人迷惑。 由于项目限制,我不能制造一个全球目标,以证明“联合国利比里亚办事处”的提法。

我认为,这一提法是我所需要的工具,但我不能对所涉类别进行重新定性,使其在未使用的情况下消失(但不能简单,不会很快)。 因此,我想执行一点更简单的内容,如果有人试图滥用这个目标,那只会发出警示,而让我的反对者保持沉默。

我认为,最佳解决办法是使用一个最先点到目标(Obj* ∗ const)——这并不使汇编者提出申诉,但我有我的 object物体和某种警报信号——通过const——也已经存在。

是否有任何人有更好的想法?

最佳回答
问题回答

你们可以让该物体的主子私下。 这将导致将时间错误汇编成册,删除物体。 您还应允许通过使用朋友机制或成员职能删除物体。

您可以围绕要点进行总结,以便修改,但不要删除:

template <typename T> class Wrapper
{
public:
    Wrapper(T *p=0) : pointer(p) {}

    T       *operator->()       {return pointer;}
    T const *operator->() const {return pointer;}
    operator bool()       const {return pointer;}

private:
    T *pointer;
};

在某些情况下,你可以像样使用模板类型,但可以要求删除。 包装类型必须是<条码>truct或>>{> 类型(即<条码>->>的类型; 有意义)。 之后,你使用但并未管理一生的那几类物品就象这样:

class User
{
public:
    void Assign(Object *o) {object = o;}
    void UseObject() {if (object) object->Use();}

private:
    Wrapper<Object> object;
};

从技术上来说,你仍然可以站在原始点上,但守则却非常错误:

delete wrapper.operator->();

象一个共享接收器一样。

另一种选择(如果您的异构体允许的话)是制造一种类似于共同点的 du子,在所涉物体和您的班子之间做包装。

你的班子如果愿意,可以试图删除这个物体,但自己将离开原标。 超过* 操作员,你可以透明地使用。

......

奥比奇班是你新班子的总合,你在座标有<条码>。 Obj* cont pObj , 你在创建新班时设立新班(如果未使用,请假为0),然后在要求履行任何职能之前对PObj进行检查?

if ( pObj ){ pObj->foo(); }

如果功能 f被错误地定义为 mu,那么你需要确定其声明。

您的新班子负责清理/删除奥杰类。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签