Re: Smart Pointers and Microsoft Foundation Classes

Tech-Archive recommends: Speed Up your PC by fixing your registry



I cleaned it up more, been tired and and forgot I was using managed code, it now compiles with no errors

template <class T>
ref class LockProxy {
public:
LockProxy(T* pObj) : pointee (pObj) { lock l(this); }
~LockProxy() {
lock l(this);
delete pointee;
}
T* operator->() { return pointee; }
T* operator&() { return pointee&; }
LockProxy operator++() {
lock l(this); // lock on an increment
return pointee++;
}
LockProxy operator--() {
lock l(this); // lock on an decrement
return pointee--;
}
bool operator==(LockProxy(T)) {
return this==pointee;
}
bool operator<(LockProxy(T)) {
return this<pointee;
}
ostream& operator<<(ostream& os) { os << LockProxy.pointee; }
private:
T* pointee;
};


"Doug Harrison [MVP]" <dsh@xxxxxxxx> wrote in message news:k28mr3he6h148ev9ogvtkcg2a7kdvafrog@xxxxxxxxxx
On Tue, 19 Feb 2008 10:19:41 -0800, "Roger Rabbit" <roger@xxxxxxxxxxx>
wrote:

Consider this, when I write win_main(...)I create a handle to my instance
that is running. I could use the pointer to determine if I am running a
second instance or not. I could for example see that I am already running,
so what not spawn a new tab in the document window.

Sure, you could write a class to manage that. I wouldn't call it a "smart
pointer", though, because that's really stretching the meaning of the term.
In C++, the term is used to describe a class that solves some of the
problems that come with raw pointers, such as the need to delete them at
some point.

For example a multi document interface text editor would create an abstract
Document and derive TextDocument and RichTextDocument classes. That seems
pretty basic, but its more tricky when a new tab surfaces. Ownership becomes
important which is why I started pondering smart pointers in the first
place.

Ownership is always important. Smart pointers can help you implement the
ownership semantics you require.

--
Doug Harrison
Visual C++ MVP


Relevant Pages

  • Re: [PATCH 08 of 11] anon-vma-rwsem
    ... have the padding due to the alignment of the 64-bit pointers in the ... On 32-bit, the alignment of list-head is obviously just 32 bits, so right ... now the structure is "perfectly packed" and doesn't have any empty space. ... spinlock_t lock; ...
    (Linux-Kernel)
  • Re: file locking.
    ... On Thu, 16 Aug 2007, John Baldwin wrote: ... I just introduced an extra flag so I could remove the race from dropping the lock inbetween operations and get an accurate count of how big the array needs to be. ... What's more troubling is the continued erosion of support for libkvm as it ... Well shaving off two pointers gets us into cacheline size for struct file which has some perf improvement. ...
    (freebsd-arch)
  • Re: Accessing process information from inside a LKM?
    ... > not aware of a kernel interface to lock the list and iterate across it. ... of the proc struct changes frequently. ... Does one navigate the process list using the five child/sibling pointers or by ... Jimmie Mayfield http://www.sackheads.org/mayfield email: mayfield+usenet@sackheads.org My mail provider does not welcome UCE -- http://www.sackheads.org/uce ...
    (comp.sys.hp.hpux)
  • Re: Most elegant way to read to allocatable array?
    ... The lock on the I/O unit table is unlocked as soon as ... file handles tend to be pointers. ... no deficiencies and the other way is to make it so complicated ...
    (comp.lang.fortran)
  • Re: correctly cleaning up and exiting the app.
    ... There is no correct clean up after all. ... devide pointers into 2 categories: ... non owning pointers ... So when you pass a pointer to Menu::add, you really transfer ownership to that ...
    (alt.comp.lang.learn.c-cpp)