【发布时间】:2011-09-20 08:07:23
【问题描述】:
可以使用下面列出的方法(我知道)创建 C++ 中的对象:
Person p;
或
Person p("foobar");
或
Person * p = new Person();
那么,为什么三星 Bada IDE 不允许我执行前两种方法?为什么我总是必须使用指针?我可以使用指针等等,只是我想知道样式背后的根本原因。
来自 Bada API 参考的示例代码。
// Create a Label
Label *pLabel = new Label();
pLabel->Construct(Rectangle(50, 200, 150, 40), L"Text");
pLabel->SetBackgroundColor(Color::COLOR_BLUE);
AddControl(*pLabel);
我修改并尝试使用下面的代码。虽然它编译并且应用程序运行,但标签不会显示在表单上。
// Create a Label
Label pLabel();
pLabel.Construct(Rectangle(50, 200, 150, 40), L"Text");
pLabel.SetBackgroundColor(Color::COLOR_BLUE);
AddControl(pLabel);
注意:使用的 Rectangle 类在没有指针的情况下动态创建对象。那么它与Label有什么不同呢?它令人困惑:-/
【问题讨论】:
-
我不知道你的问题的答案,但
Person *p = new Person()是真的糟糕的代码(一般)。在这种情况下,p应该是某种智能指针,可以获取新分配的Person的所有权。 -
你能详细说明为什么它不好吗?否则应该如何(好)?
-
@Mankarse,这只是普通的 c++ 指针代码,还不错;坏事可能是滥用或不
deleteing 分配的内存。 -
@Mankarse:bada 完全禁止异常。它更喜欢两相结构,与 RAII 正好相反。它更喜欢非抛出构造函数(例如,构造函数中没有
new),然后是 Construct 调用。原因是 bada(和 Symbian)是为资源有限的设备设计的,添加异常处理被认为是过多的开销。 IDE 可能会为此提供帮助,但我不知道为什么它会导致 OPs 问题 - 也许查看构造函数可能会有所帮助? -
@Skizz,Bada 确实使用了 new 运算符,然后是一个 Construct 调用。请看上面的代码。从Bada API reference复制的代码