【发布时间】:2009-06-19 12:41:33
【问题描述】:
我在一个简单的 C++ 类中遇到了一个奇怪的行为。
classA.h
class A
{
public:
A();
~A();
static const std::string CONST_STR;
};
classA.cpp
#include "classA.h"
#include <cassert>
const std::string A::CONST_STR("some text");
A::A()
{
assert(!CONST_STR.empty()); //OK
}
A::~A()
{
assert(!CONST_STR.empty()); //fails
}
main.cpp
#include <memory>
#include <classA.h>
std::auto_ptr<A> g_aStuff;
int main()
{
//do something ...
g_aStuff = std::auto_ptr<A>(new A());
//do something ...
return 0;
}
我预计会发生访问冲突或类似情况,但我从没想过静态 const 字符串的内容会发生变化。这里有人能很好地解释该代码中发生了什么吗?
谢谢, 诺伯特
【问题讨论】:
-
A 对象什么时候被创建和销毁?
-
你在析构函数中缺少一个右括号。
-
很抱歉。 A 对象存储在 std::auto_ptr 中,因此 main 看起来像这样: #include
#include std::auto_ptr g_aStuff; int main() { //做一些事情 ... g_aStuff = std::auto_ptr(new A()); //做某事...返回0; } -
你真的用过这段代码吗?没有包含 std::string 类,没有 A:: CONST_STR 的作用域,缺少 ~A 的断言上的紧密括号...
-
请用你的代码解决问题,否则我懒得回答告诉你我的怀疑
标签: c++ constants static-members