相关疑难解决方法(0)

是否允许删除?

是否允许delete this;delete-statement是将在该类实例上执行的最后一个语句?当然,我确信this-pointer所代表的对象是newly-created.

我在考虑这样的事情:

void SomeModule::doStuff()
{
    // in the controller, "this" object of SomeModule is the "current module"
    // now, if I want to switch over to a new Module, eg:

    controller->setWorkingModule(new OtherModule());

    // since the new "OtherModule" object will take the lead, 
    // I want to get rid of this "SomeModule" object:

    delete this;
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?

c++ memory-management new-operator self-destruction delete-operator

225
推荐指数
8
解决办法
10万
查看次数

如何通过"新"运算符阻止类分配?(我想确保我的RAII类总是在堆栈上分配.)

我想确保我的RAII类总是在堆栈上分配.

如何通过"新"运算符阻止类分配?

c++ operator-overloading c++-faq

44
推荐指数
2
解决办法
8425
查看次数

如何防止在堆上创建对象?

有没有人知道我怎么能在平台无关的C++代码中阻止在堆上创建对象?也就是说,对于"Foo"类,我想阻止用户这样做:

Foo *ptr = new Foo;
Run Code Online (Sandbox Code Playgroud)

并且只允许他们这样做:

Foo myfooObject;
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?

干杯,

c++ heap stack

26
推荐指数
3
解决办法
8478
查看次数

如何防止其他人在堆上创建一个新的类实例?

可能重复:
如何防止通过"new"运算符分配类?(我想确保我的RAII类总是在堆栈上分配.)

假设我在库中定义了一个类

class Base {};
Run Code Online (Sandbox Code Playgroud)

我将该类发布给用户.

一个用户定义了一个新类

class Derived : public Base {}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么Base来防止用户Derived在堆上创建实例?

例如,这是允许的

Derived dd;
Run Code Online (Sandbox Code Playgroud)

这不是

Derived* dd = new Derived();
Run Code Online (Sandbox Code Playgroud)

谢谢,

c++ inheritance

1
推荐指数
1
解决办法
225
查看次数