现在碰到这么个问题:我定义了个类,比如:
class CTest
{
public:
CTest();
~CTest();
public:
CString s;
}我现在不使用new来构造,而是使用类似于:
CTest* test = (CTest*)malloc(sizeof(CTest));
这样CTest的构造函数与CString的构造函数都无法调用
test->CTest();//提示是错误的。
test->s.CString();//提示是错误的
由于没有执行构造函数,所以在执行 test->s = "hello"; 的时候会报错!该怎么解决这个问题呢??
class CTest
{
public:
CTest();
~CTest();
public:
CString s;
}我现在不使用new来构造,而是使用类似于:
CTest* test = (CTest*)malloc(sizeof(CTest));
这样CTest的构造函数与CString的构造函数都无法调用
test->CTest();//提示是错误的。
test->s.CString();//提示是错误的
由于没有执行构造函数,所以在执行 test->s = "hello"; 的时候会报错!该怎么解决这个问题呢??
解决方案 »
- 关于MFC中使用Direct2D自绘按钮的刷新问题
- 开发单机软件可以使用MySql数据库吗?
- C/S中,服务器如何知道客户端的真正IP?
- 如何把一棵树的一个节点和一个控件关联起来?
- 没有窗体,可以用SetTimer么? 或者有没有类似功能的函数?
- 这个问题怎么解决?
- mfc的问题
- 如何在SDI程序的FormView窗体中调用MainFrame中的方法?
- 我想买一本编写COM的书,我现在有一点C++基础,买什么书好呢,谢谢大家
- 紧急求助:如何显示一个圆形的对话框?帮忙,着急,我正在上机面试
- 用什么方法 又快又好 可以知道当前时间距离过去的某一时间 经过了多少秒
- 自己处理消息循环,抛弃TranslateMessage和DispatchMessage,行么?
不好吗?
比如:
void Init()
{
...
}
class CTest
{
public:
CTest()
{
init();
} void init(){}}CTest* test = (CTest*)malloc(sizeof(CTest));test->init();
void* test = (void*)malloc(sizeof(CTest));
new(test) CTest();
to liu_feng_fly(笑看风云 搏击苍穹 衔日月) :
谢谢,placement new 怎么在VC中无法编译通过??to phourm , newbibe(抵制日货) :
谢谢!不过在我的CTest中果引用了别人的类例如:CString时候,我就得去一个个找他们的初始化函数,例如CString的初始化函数是:init(),这种情况下比较麻烦,不过没有其他办法的时候也只能这样了。
new(test) CTest();
E:\MFC_TEST\MFC_TESTDlg.cpp(181) : error C2143: syntax error : missing ';' before '}'
class CTest
{
public:
CTest();
CTest(int i);
~CTest();
void* operator new(size_t,void* buf){return buf;}
public:
CString s;
}char* lpbuf = (char*)malloc(sizeof(CTest));
CTest* test = new(lpbuf) CTest;new仅返回malloc分配的内存首址,
这样既调用了构造函数,又把对象放置到了你malloc的那块内存,而且你还可以调用复制构造函数,即:CTest* test = new(lpbuf) CTest(1);不过释放对象时不能用delete,因为内存是malloc的,所以必须显式调用析构函数:
test->CTest::~CTest();
像你这种情况,我觉的你可以使用内存池策略可以解决的.