为什么下面的程序会挂起?

Nar*_*use 1 c++

现在我已经有了SmartPointers,我决定尝试使用DumbPointers,它在析构函数中调用"delete"非常困难.决定继续使用DumbPointer在SmartPointer中存储数组的测试,我回忆起之前的错误,并尝试了这个:

DumbPointer<char> dumbPointer = "Hello World\0";  
Run Code Online (Sandbox Code Playgroud)

由于"也许这不是一个指针或正确的指针?"的未定义原因,它会导致程序挂起.当然,我想知道为什么,着眼于解决这个问题.我现在将在下面提供非常复杂的DumbPointer代码(也许我应该去睡觉):(让我再次向你保证:析构函数被调用)

#pragma once

#include "stdafx.h"

template <typename T> class DumbPointer
{
private:
T* myPtr;

public:
T* Value() { return myPtr; }

DumbPointer(const DumbPointer<T>& a)
 { throw new "No assignments between DumbPointer."; }
DumbPointer(T* ptr) { myPtr = ptr; }
DumbPointer(T value) { myPtr = &value; }
~DumbPointer() { delete myPtr; }


operator T*() { return myPtr; }
T* operator ->() { return myPtr; }
};
Run Code Online (Sandbox Code Playgroud)

Fre*_*man 5

您必须只有delete您分配的指针new.您将一个字符串常量传递给DumbPointer,它具有静态分配.