【发布时间】:2009-01-15 02:48:42
【问题描述】:
在我看来,一个类应该提供一个定义良好的抽象,并且不应该在没有类知识的情况下修改私有成员。但是当我检查“auto_ptr”(或任何其他智能指针)时,违反了这条规则。请看以下代码
class Foo{
public:
Foo(){}
};
int main(int argc, char* argv[])
{
std::auto_ptr<Foo> fooPtr(new Foo);
delete fooPtr.operator ->();
return 0;
}
运算符重载 (->) 给出了底层指针,它可以在不知道“auto_ptr”的情况下进行修改。我不能认为这是一个糟糕的设计,因为智能指针是由 C++ 极客设计的,但我想知道他们为什么允许这样做。有没有办法写一个没有这个问题的智能指针。
欣赏你的想法。
【问题讨论】:
-
我想不出很多有用的类没有这样的东西。它很方便,但不要傻了。
delete[] &vector[0];
标签: c++